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

Publié par Jean-Michel le

Je viens donc 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 wp_editor()fonction.

J’ai deux éditeurs TinyMCE sur mes options de thème et je me demande si je dois utiliser esc_html()ou esc_textarea()dans un rappel de validation avant d’enregistrer 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 Settings qui est prise en charge), mais il n’y a toujours pas beaucoup de documentation sur wp_editor().

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

Solution n°1 trouvée

Le TinyMCE a un filtre pour toutes les balises autorisées. Vous pouvez changer les balises, il y a des mises en standard pour vos options et l’éditeur filtre les balises. Il n’est pas nécessaire de filtrer après l’enregistrement.

Exemple de 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 à l’intérieur du tableau $initArraysont autorisées. Il est facile de supprimer les balises du tableau.
unset( $initArray['pre'] )

lire les éléments à l’intérieur du tableau viavar_dump( $initArray );

Meilleur

Solution n°2 trouvée

esc_html()et esc_textarea()sont, comme leurs noms l’indiquent, échappant aux fonctions et réellement destinés à être affichés plutôt qu’à être nettoyés ou validés. J’utiliserais wp_kses()ou wp_kses_post()(qui est juste wp_kses()avec le global $allowedposttags) pour nettoyer l’entrée d’un wp_editor()champ avant d’enregistrer.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *