Check_plain () suffit-il?

16

Est - check_plain () suffisant pour réafficher le texte saisi par les utilisateurs dans le navigateur, ou devrais - je encore avec filtre filter_xss () ?

Citricguy
la source

Réponses:

26

J'imagine que la question concerne l'utilisation check_plain(filter_xss($string)), ou filter_xss(check_plain($string)).

check_plain()et filter_xss()ont deux objectifs différents et en revanche:

  • check_plain() code des caractères spéciaux dans une chaîne de texte brut qui est ensuite affichée au format HTML.
  • filter_xss()filtre une chaîne HTML pour éviter les vulnérabilités de cross-site-scripting (XSS). Son objectif est notamment:

    • Suppression de caractères et de constructions pouvant tromper les navigateurs
    • S'assurer que toutes les entités HTML sont bien formées
    • S'assurer que toutes les balises et attributs HTML sont bien formés
    • S'assurer qu'aucune balise HTML ne contient d'URL avec un protocole interdit (par exemple javascript :)

Si vous utilisez check_plain(), la chaîne passée à la fonction est censée être utilisée comme texte brut; dans ce cas, filter_xss()n'est pas nécessaire. Si vous utilisez filter_xss(), la chaîne transmise à la fonction est censée être HTML et check_plain()n'est pas nécessaire.

Si la question concerne l'utilisation check_plain()et filter_xss()sur différentes parties de la même chaîne, alors, comme l'a souligné greggles dans son commentaire, vous pouvez utiliser (par exemple) check_plain()le contenu des attributs de balise et filter_xss()la balise HTML entière.

kiamlaluno
la source
5
filter_xss est destiné à être utilisé sur des morceaux entiers de html. Si vous utilisez filter_xss sur un attribut html, il ne le filtrera pas correctement. check_plain peut être utilisé pour filtrer en toute sécurité les attributs html. Voir aussi drupalscout.com/knowledge-base/… et drupalscout.com/knowledge-base/… pour plus d'informations sur l'utilisation de ces fonctions.
gréggle