web-dev-qa-db-fra.com

Validation sécurisée de wp_editor dans les options de thème

Donc, je viens de trouver ce super fil WPSE sur la sécurité des thèmes/plugins . Il a répondu à la plupart de mes questions, mais il a été créé avant la création de la nouvelle fonction wp_editor().

J'ai deux éditeurs TinyMCE sur les options de thème et je me demande si je dois utiliser esc_html() ou esc_textarea() dans un rappel de validation avant de sauvegarder l'option de thème. Il me semble que TinyMCE s’occupe de beaucoup de ces choses (ainsi que de la sécurité de l’API des paramètres dont il s’occupe), mais il n’existe toujours pas beaucoup de documentation sur wp_editor().

Toutes les ressources et réponses appréciées.

3
mrwweb

esc_html() et esc_textarea() sont, en fonction de leurs noms, des fonctions d'échappement et sont vraiment destinés à être affichés plutôt qu'à être nettoyés ou validés. J'utiliserais wp_kses() ou wp_kses_post() (qui est simplement wp_kses() avec le $allowedposttags global) pour supprimer les entrées d'un champ wp_editor() avant de sauvegarder.

9
helenhousandi

Le TinyMCE a un filtre pour tous les tags autorisés. Vous pouvez changer les tags, ils sont définis en standard pour vos options et l'éditeur filtre les tags. Ce n'est pas nécessaire, que vous filtrez après la sauvegarde.

Exemple pour les balises améliorées:

function fb_change_mce_options( $initArray ) {
    // Comma separated string od extendes tags
    // Command separated string of extended elements
    $ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';
    if ( isset( $initArray['extended_valid_elements'] ) ) {
        $initArray['extended_valid_elements'] .= ',' . $ext;
    } else {
        $initArray['extended_valid_elements'] = $ext;
    }
    // set tiny paramter verify_html
    $initArray['verify_html'] = true;
    return $initArray;
}
add_filter( 'tiny_mce_before_init', 'fb_change_mce_options' );

Vous pouvez également filtrer les balises. Toutes les balises du tableau $initArray sont autorisées. Il est facile de tuer les tags du tableau. unset( $initArray['pre'] )

lit les éléments à l'intérieur du tableau via var_dump( $initArray );

Meilleur

6
bueltge