2011-01-24 4 views
2

J'ai un site Web ASP.NET MVC2 qui utilise fortement Ajax et JSON pour charger des données à partir d'une base de données et remplir du code HTML. J'aimerais pouvoir encoder l'objet JSON afin qu'il rende tout HTML en texte plutôt qu'en HTML. J'ai été surpris de ne pas trouver beaucoup de discussions/solutions évidentes pour cela, car cela semble être un gros problème XSS potentiel. Suis-je en train de négliger quelque chose, et il existe un moyen simple de le faire? Ou dois-je trouver une solution interne pour cela? Si je le fais moi-même, devrais-je le faire sur le modèle, sur le contrôleur, ou dans la jquery?Comment encoder la réponse JSON/Ajax pour XSS?

Répondre

4

Pour protéger contre XSS, codez le code HTML lors de sa sortie dans la vue. Les données doivent rester crues (sauf pour le codage JSON, ce qui devrait être fait automatiquement par votre bibliothèque JSON) dans le JSON.

Si vous demandez le JSON avec JavaScript, puis en insérant une partie dans le document. Utilisez document.createTextNode(String) pour créer un textNode à partir des données (qui prend soin des caractères avec une signification spéciale en HTML), puis insérez ce textNode dans le document.

1

Un collègue m'a fait remarquer que j'utilisais .html() pour rendre les données JSON, alors que j'aurais dû utiliser .text(), ce qui est une manière implicite d'utiliser .createTextNode().

Questions connexes