62 votes

Comment empêcher les gens de faire XSS en Java?

Que dois-je faire pour empêcher XSS en Java? J'utilise Spring MVC. Pour le moment, je ne fais que mettre tous les endroits où je produis du texte utilisateur dans les balises <c:out /> , mais cela semble sujet aux erreurs car je risque de manquer un endroit.

Existe-t-il un moyen systématique simple d’empêcher cela? Peut-être comme un filtre ou quelque chose?

EDIT: Je collecte les données en spécifiant les paramètres @RequestParam sur les méthodes de mon contrôleur.

63voto

Tendayi Mawushe Points 10335

Au printemps, vous pouvez échapper au code HTML des pages JSP générées par les balises <form> . Cela ferme de nombreuses possibilités d’attaques XSS et peut être effectué automatiquement de trois manières:

Pour toute l'application dans le fichier web.xml :

 <context-param>
    <param-name>defaultHtmlEscape</param-name>
    <param-value>true</param-value>
</context-param>
 

Pour tous les formulaires sur une page donnée dans le fichier lui-même:

 <spring:htmlEscape defaultHtmlEscape="true" /> 
 

Pour chaque formulaire:

 <form:input path="someFormField" htmlEscape="true" /> 
 

8voto

Bozho Points 273663

Essayez XSSFilter .

6voto

Erlend Points 2401

Lorsque vous essayez de prévenir les attaques de type XSS, il est important de penser à le contexte. Comme un exemple de comment et quoi de s'en sortir est très différente si vous êtes ouputting de données à l'intérieur d'une variable dans un code javascript, par opposition à la sortie de données dans une balise HTML ou un attribut HTML.

J'ai un exemple ici: http://erlend.oftedal.no/blog/?blogid=91

Aussi la caisse de l'OWASP XSS Prévention de la Feuille de Triche: http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

Donc, la réponse courte est, assurez-vous de vous échapper de sortie comme suggéré par Tendayi Mawushe, mais prendre des précautions particulières lorsque vous générez des données dans les attributs HTML ou javascript.

0voto

Ben Poole Points 4976

Comment collectez-vous les entrées des utilisateurs en premier lieu? Cette question / réponse peut vous aider si vous utilisez un FormController :

Spring: échappement d'entrée lors de la liaison à la commande

0voto

sibidiba Points 2879

Vérifiez toujours manuellement les méthodes et les balises que vous utilisez et assurez-vous qu’elles s’échappent toujours (une fois) à la fin. Les frameworks ont de nombreux bugs et différences dans cet aspect.

Un aperçu: http://www.gablog.eu/online/node/91

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X