web-dev-qa-db-fra.com

Utilise suffisamment les HTMENENTités ou HTMLSpecialCalchars suffisamment pour bloquer l'attaque XSS

Je sais que cette question a été discutée sur les différents moments nets. et les gens donnent un exemple comment contourner ces fonctions en passant du code. Mais ici, un problème, tous les exemples de HTMentities/HTMLSpecialchars sont liés lorsque nous intégrons comme valeur d'attribut comme

<a href="" title="<?php echo htmlentities([XSS_CODE]) ?>"></a> 

OR

<img onerror="<?php echo htmlentities([XSS_CODE]) ?>" /> 

Mais si j'ai besoin de montrer des données en tant que contenu comme ci-dessous.

<div><?php echo htmlentities([XSS_CODE]) ?></div>

Comment ça pourrait être insécurisé. Comme le code n'aura pas de déclenchement/des événements comme en cas d'attributs, cela devrait en sécurité dans tous les cas.

J'ai étudié https://www.owasp.org/index.php/xsss_filter_evasion_cheat_sheet . Presque tous les exemples de Bypass d'attaque/filtre XSS ne fonctionne pas pour le cas donné. J'ai essayé une valeur codée hexagonale de <&> comme indiqué dans le dernier para de l'URL, mais qui a échoué à nouveau et ne faisait que simplement comme des données.

J'ai en fait un doute sur https://www.owasp.org/index.php/xsss_filter_evasion_cheat_sheet#character_escape_réquences qui ont une combinaison qui n'a pas maniété par HTMlenttities comme\x3c,\u003c,% 3c. Pendant que je suis moi-même incapable de produire et d'exploiter les utiliser.

J'ai essayé l'exemple comme

$code = "\x3cstrong\x3eHello World\x3\cstrong\x3e";
// OR
$code = "\u003cstrongu003eHello Worldu003c\cstrongu003e";


<div><?php echo htmlentities($code); ?></div>

Remarque: j'ai essayé toutes les attaques sur Firfox 40 dans Ubuntu Machine.

4
kuldeep.kamboj

htmlentities est la meilleure fonction à utiliser car elle code tous les caractères possibles.

La seule façon de voir que les XSS sont obtenus dans votre exemple sont avec Internet Explorer si le Charset est défini sur UTF-7 .

Si votre chariage est UTF-7, alors

+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-

devient

<script>alert(document.location)</script>

quand interprété par le navigateur. De plus, htmlentities ne provoque aucun codage des caractères.

Gardez à l'esprit que seules les anciennes versions d'Internet Explorer détectent automatiquement UTF-7 - il faudrait être explicitement définie dans des versions modernes (soit par l'auteur du site Web, soit par l'attaquant en utilisant un autre vecteur) - voir cette réponse .

5
SilverlightFox

Lorsqu'un navigateur analyse un attribut d'événement comme "Onerror", il est en premier lieu HTML décode la valeur de l'attribut, puis l'envoie au moteur JS pour l'exécution. C'est pourquoi il ne suffit pas de ne pas encoder le contenu de l'utilisateur de HTML que vous insérez dans de tels attributs.

En revanche, lorsqu'un navigateur analyse un <script> tag, il ne décode pas HTML décoder son contenu. Il vient de transmettre son contenu au moteur JS pour l'exécution.

De même, lorsque vous insérez du contenu utilisateur entre <div> Tags, je ne vois pas une façon de voir que les XSS peuvent être possibles si les données utilisateur sont codées HTML car le navigateur ne décodage pas, sauf bien sûr uniquement pour la présentation des caractères codés à l'écran.

Et je n'ai aucune idée de la manière dont l'attribut titre de la <a> tag pourrait conduire à des XSS si c'est le contenu est codé HTML et il est double coté. S'il vous plaît laissez-moi savoir si vous savez comment :)

1
stanko