Maison >php教程 >PHP开发 >Analyse de la stratégie de prévention des attaques Yii2 XSS

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

高洛峰
高洛峰original
2016-12-23 16:46:421273parcourir

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.php

Constantes des indicateurs disponibles

Nom 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_NOQUOTES laissera les guillemets doubles et simples non convertis.

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.

3826f7a02900bccc492b5c34e924b619 (supérieur à) devient >

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





urlencode
<?php
$new = htmlspecialchars("<a href=&#39;test&#39;>Test</a>", ENT_QUOTES);
echo $new; // <a href=&#39;test&#39;>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=7477

Le 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 &#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);
?>
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 !

Déclaration:
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