Cet article décrit la stratégie de prévention des attaques XSS de Yii2 avec des exemples. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Réparation de vulnérabilité XSS
Principe : Ne faites pas confiance aux données saisies par le client
Remarque : Le code d'attaque n'est pas nécessairement dans 3f1c4e4b6b16bbbd69b2ee476dc4f83a0770d56a2418b074605251cc49f2fadd Marquez les cookies importants comme http uniquement, afin que l'instruction document.cookie en Javascript ne puisse pas obtenir le cookie
② Autoriser uniquement les utilisateurs à saisir le. données que nous attendons. Par exemple : dans la zone de texte Âge, les utilisateurs sont uniquement autorisés à saisir des chiffres. Les caractères autres que les chiffres sont filtrés.
③ Html Encode le traitement des données
④ Filtrez ou supprimez les balises HTML spéciales, telles que : script, iframe, bd908e9f3ad427276a829b98921f92c0 pour >, " for
⑤ Filtrez les balises d'événements JavaScript. Par exemple, "onclick=", "onfocus" et ainsi de suite
Prévention XSS dans Yii
<?php echo CHtml::encode($user->name) ?>
Code source :
<.>
/** * Encodes special characters into HTML entities. * The [[\yii\base\Application::charset|application charset]] will be used for encoding. * @param string $content the content to be encoded * @param boolean $doubleEncode whether to encode HTML entities in `$content`. If false, * HTML entities in `$content` will not be further encoded. * @return string the encoded content * @see decode() * @see http://www.php.net/manual/en/function.htmlspecialchars.php */ public static function encode($content, $doubleEncode = true) { return htmlspecialchars($content, ENT_QUOTES | ENT_SUBSTITUTE, Yii::$app->charset, $doubleEncode); }htmlspecialchars & htmlentities & urlencode La différence entre les trois : http://php.net/manual/zh /function.htmlspecialchars.php
http://php .net/manual/zh/function.htmlentities.php
http://cn2.php.net/manual/zh/function.urlencode.phpConstantes des indicateurs disponiblesNom de la constante Description
ENT_COMPAT Convertira les guillemets doubles et laissera les guillemets simples seuls.
ENT_QUOTES Convertira les guillemets doubles et simples.
ENT_IGNORE Supprime silencieusement les séquences d'unités de code non valides. au lieu de renvoyer une chaîne vide. L'utilisation de cet indicateur est déconseillée car elle peut avoir des implications en matière de sécurité.
ENT_SUBSTITUTE Remplacez les séquences d'unités de code non valides par un caractère de remplacement Unicode U FFFD (UTF-8) ou FFFD (sinon) ; de renvoyer une chaîne vide.
ENT_DISALLOWED Remplacez les points de code invalides pour le type de document donné par un caractère de remplacement Unicode U FFFD (UTF-8) ou FFFD (sinon) au lieu de les laisser tels quels. , par exemple, pour garantir la bonne forme des documents XML avec du contenu externe intégré.
ENT_HTML401 Gère le code comme HTML 4.01.
ENT_XML1 Gère le code comme XML 1.
ENT_XHTML Gère le code comme XHTML 🎜><.>
Les traductions effectuées sont :
& (esperluette) devient &
" (guillemet double) devient " lorsque ENT_NOQUOTES n'est pas défini.
' (guillemet simple) devient ' (ou ') uniquement lorsque ENT_QUOTES est défini.
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )
entités HTML
Convertir tous les caractères applicables en entités HTML
<?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // <a href='test'>Test</a> ?>
Encodage d'URL est de se conformer aux spécifications de l'URL. Parce que dans la spécification d'URL standard, le chinois et de nombreux caractères ne sont pas autorisés à apparaître dans l'URL.
Par exemple, recherchez « tester les caractères chinois » dans Baidu. L'URL deviendra
http://www.baidu.com/s?wd=���ν��&rsv_bp=0&rsv_spt=3&inputT=7477Le soi-disant encodage d'URL est : convertir tous les caractères numériques autres que des lettres seront remplacés par un signe de pourcentage (%) suivi de deux chiffres hexadécimaux, et les espaces seront codés sous forme de signes plus ( )Tous les caractères non alphanumériques de cette chaîne sauf -_ seront remplacés. avec un signe de pourcentage (%) suivi de deux chiffres hexadécimaux, et les espaces sont codés sous forme de signes plus ( ). Cet encodage est le même que l'encodage des données POST du formulaire WWW et le même encodage que le type de média application/x-www-form-urlencoded. Pour des raisons historiques, ce codage diffère du codage RFC1738 (voir rawurlencode()) dans les espaces de codage sous forme de signes plus ( ).
string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )
<?php $str = "A 'quote' is <b>bold</b>"; // Outputs: A 'quote' is <b>bold</b> echo htmlentities($str); // Outputs: A 'quote' is <b>bold</b> echo htmlentities($str, ENT_QUOTES); ?>J'espère que cet article sera utile à la conception de programmes PHP de chacun basés sur le framework Yii. Pour plus d'articles liés à l'analyse de la stratégie de prévention des attaques XSS de Yii2, veuillez prêter attention au site Web PHP chinois !