Meilleur regex pour attraper les attaques de type XSS (Cross-site Scripting) attaque (en Java)?
Jeff fait posté à ce sujet dans Nettoyer le code HTML. Mais son exemple est en C# et en fait je suis plus intéressé par une version de Java. Quelqu'un aurait-il une meilleure version de Java? Son exemple en est assez bon pour convertir directement à partir de C# Java?
[Mise à jour] j'ai mis une prime sur cette question, parce que ce n'était pas aussi populaire quand j'ai posé la question comme elle l'est aujourd'hui (*). Comme pour tout ce qui concerne la sécurité, les plus de gens se tournent vers elle, et le meilleur c'est!
(*) En fait, je pense que c'est encore en bêta fermée
- Quoi de plus avez-vous besoin? Les réponses semblent bonnes pour moi.
Vous devez vous connecter pour publier un commentaire.
Ne pas le faire avec des expressions régulières. Rappelez-vous, vous n'êtes pas protéger seulement contre un code HTML valide; vous êtes la protection contre le DOM que les navigateurs web créer. Les navigateurs peuvent être trompé en produisant valide DOM à partir de code HTML non valide assez facilement.
Voir, par exemple, cette liste de obscurci les attaques XSS. Êtes-vous prêt à adapter une regex pour éviter ce monde réel attaque sur Yahoo et Hotmail sur IE6/7/8?
Comment au sujet de cette attaque, qui fonctionne sous IE6?
Comment sur des attaques qui ne sont pas répertoriées sur ce site? Le problème avec Jeff approche est qu'elle n'est pas une "liste blanche", comme le prétend. Comme quelqu'un sur cette page habilement notes:
Je dirais un outil comme AntiSamy. Il fonctionne en analysant le code HTML, puis traversant les DOM et en supprimant tout ce qui n'est pas dans le configurable liste blanche. La différence majeure est la capacité à gérer harmonieusement code HTML mal formé.
La meilleure partie est qu'il fait des tests unitaires pour toutes les attaques XSS sur le site ci-dessus. D'ailleurs, quoi de plus simple que cet appel d'API:
L'Open Web Application Security Project (OWASP) avons quelques suggestions pour l'assainissement de votre entrée. Voir par exemple:
Je suis pas convaincu que l'utilisation d'une expression régulière est le meilleur moyen pour trouver tous les code suspect. Les expressions régulières sont assez facile de tromper spécialement lorsque vous traitez avec rompu HTML. Par exemple, l'expression régulière répertoriés dans le Désinfecter HTML lien ne parviennent pas à éliminer tous les 'a' éléments qui possèdent un attribut entre le nom de l'élément et l'attribut 'href':
< alt="xss, injection" href="http://www.malicous.com/bad.php" >
Une façon plus robuste de suppression de code malveillant est de s'appuyer sur un Analyseur XML qui peut gérer tous les types de documents HTML (bien Rangé, TagSoup, etc) et de sélectionner les éléments à supprimer avec une expression XPath. Une fois le document HTML est analysé dans un document DOM les éléments de revome peuvent être trouvés facilement et en toute sécurité. C'est même facile à faire avec XSLT.
J'ai extrait de NoScript meilleur Anti-XSS addon, voici la Regex:
Travail impeccable:
Test: http://regex101.com/r/rV7zK8
Je pense que c'bloquer 99% XSS parce que c'est une partie de NoScript, un addon qui me mis à jour régulièrement
javascript:
href.Valider les caractères, chiffres, espaces et aussi la
<br>
tag.Si vous voulez plus de risques, vous pouvez ajouter d'autres balises comme
Cette question illustre parfaitement une grande application à l'étude de la Théorie de l'informatique. La théorie de l'informatique est un domaine qui se concentre sur la production de représentations mathématiques de l'informatique.
Certains des plus profondes de la recherche dans le calcul de la théorie est la preuve, qui illustrent les relations des diverses langues.
Une partie de la langue des relations que le calcul de théoriciens ont prouvé comprennent:
Cela montre que sans contexte langues sont plus puissants que les langages réguliers. Ainsi, si une langue est explicitement sans contexte (contexte libre et non régulier), alors il est impossible pour tout expression régulière à la reconnaître.
JavaScript est à tout le moins, sans contexte, ainsi, nous savons à cent pour cent de certitude que la conception d'une expression régulière (regex) capable d'attraper tous les XSS est une tâche impossible.
Le plus gros problème en utilisant jeffs est le code de @ qui actuellement n'est pas disponible.
Je serais probablement juste prendre le "raw" regexp de jeffs code si j'en avais besoin et le coller dans
http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html
et de voir les choses qui ont besoin d'évasion obtenir échappé et ensuite de l'utiliser.
La prise de l'utilisation de cette expression dans l'esprit, je serais personnellement me faire comprendre exactement ce que je faisais, pourquoi et quelles seraient les conséquences si je n'ai pas de réussir, avant de copier/coller quoi que ce soit, comme les autres réponses essayer de vous aider avec.
(C'est propbably assez judicieux conseils pour tout copier/coller)
[\s\w\.]*
. Si elle ne correspond pas, vous avez XSS. Peut-être. Prendre note que cette expression permet uniquement de lettres, de chiffres, et des périodes. Il évite tous les symboles, même ceux qui sont utiles, de peur de XSS. Une fois que vous laissez &, vous avez des soucis. Et rien que le remplacement de toutes les instances de & avec&
n'est pas suffisant. Trop compliqué de confiance :P. Évidemment, cela empêche beaucoup de légitime texte (que Vous pouvez remplacer toutes ces différences de caractères avec un ! ou quelque chose), mais je pense qu'il va tuer XSS.L'idée de simplement analyser comme du html et de générer de nouveaux html est probablement mieux.
Un vieux thread mais peut-être que ce sera utile pour d'autres utilisateurs. Il y a un maintenu la couche de sécurité de l'outil pour php: https://github.com/PHPIDS/ Il est basé sur un ensemble de regex que vous pouvez trouver ici:
https://github.com/PHPIDS/PHPIDS/blob/master/lib/IDS/default_filter.xml