Comment et quand utiliser filter_xss () et check_plain ()?

11

Il y a beaucoup de fichiers modèles comme celui-ci views-view-fields--magazine--magazine.tpl.phpsur mon site Web. comment et quand dois-je utiliser les filtres filter_xss () et check_plain () pour améliorer la sécurité? par exemple, voici le code:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

Comment puis-je y appliquer ces fonctions?

M ama D
la source
À utiliser filter_xss()lorsque vous souhaitez filtrer XSS à partir de contenu potentiellement dangereux (c'est-à-dire le contenu d'un utilisateur non fiable) et check_plain()lorsque vous souhaitez échapper des caractères spéciaux HTML d'une chaîne
Clive

Réponses:

13

Tout d'abord, lisez-les dans l'API Drupal:

check_plain()Encode donc les caractères spéciaux qui ont une signification spéciale en HTML (comme <et &) en entités de texte brut (ie &lt;et &amp;respectivement) qui les rendront littéralement (non interprétés comme HTML) lorsque cette chaîne qui sera ensuite affichée dans le cadre d'une page avec Balisage HTML. La fonction filter_xss()filtre une chaîne HTML pour éviter les vulnérabilités de cross-site-scripting (XSS). Cela fait quatre choses:

  • 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 :)

Les deux fonctions sont utilisées pour nettoyer les données des utilisateurs afin de s'assurer que toute injection d'utilisateur est neutralisée avant que les données ne soient rendues sur votre site.

Vous ne passez jamais la même chaîne à travers les deux .

Si vous utilisez, check_plain()la chaîne transmise à la fonction est censée être utilisée en texte brut (et non en HTML). Alors filter_xss()n'est pas nécessaire, car check_plain()rendra toujours la chaîne en texte brut.

Si vous utilisez filter_xss(), la chaîne transmise à la fonction est censée être HTML et la check_plain()gâchera.

Lorsque je regarde le modèle que vous utilisez comme exemple, il me semble que les trois champs transmis print()proviennent d'un contenu déjà filtré et n'ont plus besoin d'être nettoyés.

Cependant, si vous créez votre propre module qui collecte les entrées des utilisateurs sans les passer par un filtre de texte "sûr" tel que "HTML filtré" ou "Ordinaire", vous devez utiliser ces fonctions à des fins d'assainissement.

Radical gratuit
la source
Où puis-je vérifier que les entrées proviennent des utilisateurs? par exemple, il existe un type de contenu et les utilisateurs anonymes sont autorisés à créer ce type de nœuds.
M ama D
@Drupalist, vous ne devez jamais autoriser l'utilisateur anonyme à utiliser un format de texte "dangereux". Accédez à Administration »Configuration» Création de contenu »Formats de texte . Les formats de texte «sûrs» fournis avec Drupal sont «HTML filtré» et «Texte brut». Si ce sont les seuls formats autorisés pour l'utilisateur anonyme, Drupal effectue les vérifications requises pour vous pour tout type de nœud intégré et tout type de nœud que vous créez avec la fonctionnalité Fields principale . Si votre cas d'utilisation est différent de celui-ci, posez une nouvelle question expliquant le cas d'utilisation.
Radical gratuit
Les utilisateurs anonymes ne sont autorisés à utiliserplain text
M ama D
@Drupalist, ça va. Il n'est pas nécessaire d'utiliser ces fonctions pour nettoyer le texte brut.
Radical gratuit
3
@ARUN, non. La pratique standard de Drupal est de toujours sauvegarder exactement ce que l'utilisateur tape dans la base de données et de nettoyer le texte avant le rendu.
Radical gratuit du