web-dev-qa-db-fra.com

UrlenCode vs HTMlenCode pour la prévention XSS

J'ai un projet (en Java) que le programmateur a utilisé UrlenCode pour produire du contenu dans le cadre de HTML au lieu de HTMLenCode.

Quel est le risque qu'il soit XSS vulnérable? (Oublions que c'est un codage différent et il obtiendra des résultats différents)

Quelle est la bonne façon de faire HTMlenCode en Java?

6
AaronS

Évaluation des risques. Si les données d'urlencode sont insérées dans le contexte HTML (par exemple, entre les balises), je ne sais aucun moyen d'introduire une attaque XSS. UrlenCode va échapper à la <, >, et & caractères (à %3C, %3E, et %26, respectivement). Dans les navigateurs modernes, je crois que cela suffit à prévenir les XSS pour les valeurs insérées entre les balises.

Il y a quelques cas plus obscurs où des attaques pourraient être possibles. Si vous introduisez des données non soignées (mais urlencodes) dans d'autres contextes analyses, telles qu'une URL (par exemple, l'attribut HREF de la balise A), dans JavaScript, ou dans CSS, il est possible que les attaques XSS soient toujours possibles malgré l'urlencode d'utilisation. Néanmoins, ces contextes sont moins courants, alors je soupçonne qu'ils ne sont pas ce dont vous parlez.

Donc, en bref, il est peu probable que cela soit vulnérable à XSS (autant que je sache).

Pourquoi vous ne devriez pas le faire. Néanmoins, comme je pense que vous reconnaissez, UrlenCode est clairement la mauvaise solution pour ce problème. Il échappe aux données dans le mauvais sens et que les données seront mutilées lorsque l'utilisateur le considère dans son navigateur. N'utilisez pas d'urlencode; C'est le mauvais outil pour le travail. Au lieu de cela, utilisez la fonction d'échappement appropriée pour le contexte HTML que vous allez utiliser.

Comment le faire correctement. Voir ma discussion ailleurs sur la manière de sélectionner la fonction d'échappement appropriée et où obtenir une implémentation de cette fonction d'échappement. Par exemple, Owasp Esapi est une bibliothèque fine pleine de fonctions d'échappement HTML pouvant être utilisées pour prévenir les vulnérabilités XSS.

9
D.W.