Formation PUB020 : WordPress, 2023 Sécuriser un site WordPress

18.4 Protection XSS dans les commentaires


La fonction qui permet aux internautes de commenter les articles et les pages d'un site WordPress est certainement très intéressante. Elle comporte cependant, comme tout formulaire Web, deux risques importants :

Protection XSS des commentaires

Pour tout site PHP, la principale technique utilisée pour prévenir les attaques XSS consiste à utiliser la fonction htmlspecialchars() pour encoder les caractères potentiellement dangereux, notamment < et > (la technique utilisée par WordPress est en réalité plus sophistiquée).

Cette technique est efficace pour empêcher les balises <script> d'être exécutées ou encore pour prévenir l'utilisation de balises <iframe> ou <embed>. Cependant, elle nous prive de la possiblité d'ajouter des balises HTML innoffensives, par exemple <p> ou <img>.

Afin d'obtenir le meilleur des deux mondes, l'API de WordPress a été conçu pour encoder le texte d'un commentaire seulement si l'usager ne possède pas les droits requis pour entrer des balises HTML (droit unfiltered_html).

Par défaut, le droits unfilterd_html est donné seulement aux les usagers avec le rôle :

  • super-administrateur (ce rôle existe seulement pour les installations WordPress multi-sites)
  • administrateur
  • éditeur (seulement si l'installation n'est pas multi-sites)

Ces droits sont configurables et peuvent être retrouvés dans la table wp_options, dans l'enregistrement wp_user_roles.

C'est dans le code du fichier /wp-includes/comment-template.php qu'on voit qu'une protection est appliquée aux commentaires si les usagers ne possèdent pas le droit unfiltered_html :

PHP

function wp_comment_form_unfiltered_html_nonce() {

    $post    = get_post();

    $post_id = $post ? $post->ID : 0;


    if ( current_user_can( 'unfiltered_html' ) ) {

        wp_nonce_field( 'unfiltered-html-comment_' . $post_id, '_wp_unfiltered_html_comment_disabled', false );

        echo "<script>(function(){if(window===window.parent){document.getElementById('_wp_unfiltered_html_comment_disabled').name='_wp_unfiltered_html_comment';}})();</script>\n";

    }

}

Pour plus d'information

« A Deep Dive Into WordPress User Roles and Capabilities ». Kinsta. https://kinsta.com/blog/wordpress-user-roles/

« Roles and Capabilities - Capability vs. Role Table ». WordPress. https://wordpress.org/support/article/roles-and-capabilities/#capability-vs-role-table

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre