Position actuelle: Accueil> Derniers articles> Comment combiner MB_SCRUB et HTMLSpecialChars pour empêcher les attaques XSS?

Comment combiner MB_SCRUB et HTMLSpecialChars pour empêcher les attaques XSS?

gitbox 2025-07-17

L'attaque de script inter-sites (XSS) est une menace de sécurité courante et dangereuse dans le développement Web. En injectant le code de script malveillant, l'attaquant fait d'effectuer le navigateur d'effectuer un comportement inattendu, de voler des informations utilisateur, de détourner des sessions et même de contrôler le navigateur de l'utilisateur. Pour empêcher les XS, les développeurs filtrent et codent généralement strictement l'entrée utilisateur. Dans PHP, HTMLSpecialChars () est l'une des méthodes de protection les plus couramment utilisées. Cependant, si le contenu soumis par l'utilisateur contient des séquences de caractères non valides ou illégales, l'utilisation de htmlSpecialCars () peut ne pas empêcher complètement la vulnérabilité. À l'heure actuelle, il est nécessaire de combiner mb_scrub () pour un traitement plus robuste.

Qu'est-ce que MB_SCRUB?

MB_SCRUB () est une fonction introduite dans PHP 8.2, qui est utilisée pour "nettoyer" une chaîne multi -yte contenant des caractères illégaux pour en faire une chaîne légale. Si les caractères multi-octets sont tronqués pendant la transmission ou le traitement, une séquence de caractères non valide peut être formée. Si cette séquence illégale est directement transmise dans htmlSpecialCars () , elle peut contourner le mécanisme d'échappement attendu dans certaines conditions.

Par exemple, une séquence d'octets UTF-8 illégale peut être analysée dans le navigateur par erreur, entraînant une injection de script.

 <span><span><span class="hljs-comment">// Exemple:Entrée contenant des octets illégaux</span></span><span>
</span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"\xC0&lt;script&gt;alert('XSS');&lt;/script&gt;"</span></span><span>;

</span><span><span class="hljs-comment">// Utiliser directement htmlspecialchars(Précaire)</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span></span>

Dans l'exemple ci-dessus, si $ l'entrée contient des octets UTF-8 illégaux, le navigateur peut ignorer ces octets et exécuter des balises <cript> ultérieures.

Comment utiliser MB_SCRUB avec htmlSpecialChars?

Pour résoudre ce problème, nous pouvons d'abord utiliser mb_scrub () pour nettoyer la chaîne, puis la transmettre à htmlSpecialChars () pour l'évasion de l'entité HTML.

 <span><span><span class="hljs-comment">// Pratiques de sécurité:Nettoyer d&#39;abord,Échapper à nouveau</span></span><span>
</span><span><span class="hljs-variable">$clean</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_scrub</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-variable">$safe</span></span><span> = </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$clean</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$safe</span></span><span>;
</span></span>

Les avantages de cette combinaison sont:

  1. MB_SCRUB () garantit la légalité des séquences de caractères : les caractères non valides sont fixes ou supprimées pour éviter les erreurs du navigateur lors de la manipulation des encodages illégaux.

  2. htmlSpecialCars () fournit une évasion de tag : converties < , > , " , ' et d'autres caractères en entités HTML pour empêcher l'injection de HTML.

Conseils pratiques

  1. Spécifiez toujours le jeu de caractères sur UTF-8 pour assurer la cohérence multiplateforme.

  2. Nettoyez et échappez à toutes les entrées utilisateur , en particulier lors de la sortie vers HTML.

  3. Utilisez avec le contenu-sécurité-politique (CSP) pour réduire davantage les risques XSS.

  4. Passez à PHP 8.2 ou version ultérieure pour utiliser la fonction MB_SCRUB () .

résumé

Bien que HTMLSpecialChars () soit l'outil de base pour empêcher les XS, ce n'est pas un omnipotent. Si l'entrée de l'utilisateur contient un codage de caractères illégal, il peut provoquer une vulnérabilité de sécurité. En ajoutant MB_SCRUB () avant lui, les caractères illégaux peuvent être effacés efficacement et la résistance à la protection est améliorée. Pour les développeurs PHP qui poursuivent des normes de sécurité supérieures, cette combinaison mérite d'être promue.