Analyse de la méthode de la stratégie de prévention des attaques XSS de Yii2

不言
Libérer: 2023-04-01 13:34:02
original
2140 Les gens l'ont consulté

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) ?>
Copier après la connexion

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);
}
Copier après la connexion

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.

htmlspecialchars.

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 ]
    ]
  ] 
)
Copier après la connexion

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=&#39;test&#39;>Test</a>", ENT_QUOTES);
echo $new; // <a href=&#39;test&#39;>Test</a>
?>
Copier après la connexion

htmlentities

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 ]
    ]
  ] 
)
Copier après la connexion

<?php
$str = "A &#39;quote&#39; is <b>bold</b>";
// Outputs: A &#39;quote&#39; is <b>bold</b>
echo htmlentities($str);
// Outputs: A &#39;quote&#39; is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>
Copier après la connexion

urlencode

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 (+)

Sauf pour -_ Tous les caractères non alphanumériques. les caractères sont remplacés par un signe de pourcentage (%) suivi de deux chiffres hexadécimaux et les espaces sont codés sous forme de signe 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 (+).


<?php
echo &#39;<a href="mycgi?foo=&#39;, urlencode($userinput), &#39;">&#39;;
?>
Copier après la connexion

<?php
$query_string = &#39;foo=&#39; . urlencode($foo) . &#39;&bar=&#39; . urlencode($bar);
echo &#39;<a href="mycgi?&#39; . htmlentities($query_string) . &#39;">&#39;;
?>
Copier après la connexion

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 Yii


Comment gérer les liens de routage transférés dans Yii2. 0 Droiture du code de base


Ce 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal