Cet article présente principalement la stratégie de prévention des attaques XSS de Yii2. Il analyse plus en détail le principe de l'attaque XSS et la stratégie de prévention correspondante de Yii2. Les amis dans le besoin peuvent s'y référer
Cet article décrit la stratégie de prévention des attaques XSS de Yii2. exemple de stratégies de prévention des attaques Yii2 XSS. 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 < ;script>
① Marquez les cookies importants comme http uniquement, afin que l'instruction document.cookie en Javascript ne puisse pas obtenir le cookie.
② Uniquement permettre aux utilisateurs de nous saisir les données attendues. 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, < pour <, > pour ", " pour
⑤ Filtrez l'étiquette des événements JavaScript. Par exemple "onclick=", "onfocus" etc.
Prévention XSS dans Yii
<?php echo CHtml::encode($user->name) ?>
Code source de cette méthode :
/** * 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); }
La différence entre htmlspecialchars & htmlentities & urlencode :
http://php.net/manual/zh/function.htmlspecialchars.php
http ://php.net/manual/zh/function.htmlentities.php
http://cn2.php.net/manual/zh/function.urlencode.php
Constantes des indicateurs disponibles
Description du nom de la constante
ENT_COMPAT Convertira les guillemets doubles et laissera les guillemets simples seuls.
ENT_QUOTES Convertira les guillemets doubles et simples.
ENT_NOQUOTES laissera les guillemets doubles et simples non convertis.
ENT_IGNORE Supprimer silencieusement séquences d'unités de code invalides au lieu de renvoyer une chaîne vide. L'utilisation de cet indicateur est déconseillée car cela peut avoir des implications en matière de sécurité.
ENT_SUBSTITUTE Remplacez les séquences d'unités de code invalides par un caractère de remplacement Unicode U+FFFD (UTF-8) ou FFFD ; sinon) au lieu 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 ; être utile, par exemple, pour garantir la bonne forme des documents XML avec du contenu externe intégré.
ENT_HTML401 Gérer le code comme HTML 4.01
ENT_HTML5 Gérer le code comme HTML 5.
Convertir les caractères spéciaux en entités HTML
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ] ] ] )
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.
< (inférieur à) devient < ;
> (supérieur à) devient >
<?php $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); echo $new; // <a href='test'>Test</a> ?>
Convertir toutes les entités applicables caractères aux entités HTML
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); ?>
Le codage de l'URL doit être conforme à la spécification 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=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477
Donc -appelé le codage d'URL est le suivant : tous les caractères non alphanumériques 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 (+)
<?php echo '<a href="mycgi?foo=', urlencode($userinput), '">'; ?>
<?php $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar); echo '<a href="mycgi?' . htmlentities($query_string) . '">'; ?>
Ce qui précède est l'intégralité du contenu de ce article, j'espère qu'il sera utile à l'apprentissage de tout le monde. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Comment implémenter le nettoyage du cache YiiComment gérer les liens de routage transférés dans Yii2. 0 Droiture du code de baseCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!