Securitate WordPress: dezactivarea etichetelor HTML din secțiunea de comentarii

În mod implicit, WordPress permite utilizarea unui set restrâns de etichete HTML în secțiunea de comentarii (cum ar fi <a>, <b>, <i> sau <blockquote>). Deși intenția inițială este de a oferi vizitatorilor flexibilitate la formatare, această funcționalitate devine adesea o țintă predilectă pentru campanii de spam și tentative de injectare de cod malițios.

Dacă dorești să dezactivezi complet interpretarea etichetelor HTML din comentarii și să afișezi textul introdus exact așa cum a fost redactat, nu ai nevoie de un modul extern. Poți realiza acest lucru adăugând câteva filtre simple în fișierul functions.php al temei active sau într-un plugin dedicat de securitate.

Filtrarea etichetelor HTML în WordPress

Cea mai curată abordare constă în neutralizarea entităților HTML înainte de salvarea comentariului în baza de date, asigurând totodată afișarea corectă a semnelor de punctuație speciale (cum ar fi apostrofurile simple):

// Neutralizează etichetele HTML la trimiterea comentariului
function dexblog_filtreaza_html_comentarii( $incoming_comment ) {
    // Convertește caracterele speciale HTML pentru a fi afișate ca text brut
    $incoming_comment['comment_content'] = htmlspecialchars( $incoming_comment['comment_content'], ENT_QUOTES, 'UTF-8' );
    
    // Înlocuiește apostroful simplu pentru a evita detectarea eronată ca spam de către filtrele automate
    $incoming_comment['comment_content'] = str_replace( "'", '&apos;', $incoming_comment['comment_content'] );
    
    return $incoming_comment;
}
add_filter( 'preprocess_comment', 'dexblog_filtreaza_html_comentarii', 10, 1 );

// Restabilește afișarea corectă a semnelor de punctuație la randare
function dexblog_restabileste_comentariu( $comment_to_display ) {
    $comment_to_display = str_replace( '&apos;', "'", $comment_to_display );
    return $comment_to_display;
}
add_filter( 'comment_text', 'dexblog_restabileste_comentariu', 10, 1 );
add_filter( 'comment_text_rss', 'dexblog_restabileste_comentariu', 10, 1 );
add_filter( 'comment_excerpt', 'dexblog_restabileste_comentariu', 10, 1 );

De ce este utilă această măsură?

  • Prevenirea atacurilor XSS (Cross-Site Scripting): elimină posibilitatea rulării unor scripturi JavaScript malițioase prin intermediul comentariilor nefiltrate.
  • Combaterea spamului de linkuri: împiedică spamerii să insereze ancore HTML ascunse pentru a obține backlinkuri neautorizate.
  • Păstrarea unui aspect vizual uniform: evită situațiile în care etichete HTML neînchise corect de către vizitatori strică structura grafică a paginii de articol.

Prin implementarea acestui fragment de cod, orice etichetă introdusă de vizitatori (de exemplu <b>text</b>) va fi afișată ca text simplu, fără a fi interpretată ca stil de către browserul web.

2 comentarii

Lasă un comentariu