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 :
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 :
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 :
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";
}
}
« 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é