Réponses JSON peuvent être exploitées par des raisons impérieuses de la Matrice de constructeurs ou si hostile valeurs ne sont pas JavaScript chaîne de caractères d'échappement.
Supposons ces deux vecteurs sont adressées de la manière habituelle. Google célèbre les pièges réponse JSON à l'approvisionnement direct par la préfixation de tous JSON avec quelque chose comme:
throw 1; < don't be evil' >
Et puis le reste du JSON suit. Donc, M. le Mal ne peut pas, à l'aide de la sorte d'exploiter discuté ici http://sla.ckers.org/forum/read.php?2,25788 obtenir votre cookie (en supposant que vous êtes connecté) en mettant les suivantes sur son site:
<script src="http://yourbank.com/accountStatus.json">
Comme pour l'échappement de la chaîne règles, eh bien, si nous sommes à l'aide de guillemets doubles, nous avons besoin de préfixer chaque avec une barre oblique inverse et chaque barre oblique inverse avec une autre barre oblique inverse etc.
Mais ma question est, que faire si vous êtes en train de faire tout cela?
Burpsuite (l'outil de sécurité automatisé) détecte intégré XSS tentatives qui sont retournés unHTML échappé à une réponse JSON et il le signale comme une vulnérabilité XSS. J'ai un rapport que mon application contient des vulnérabilités de ce type mais je ne suis pas convaincu. Je l'ai essayé et je ne peux pas faire un exploit de travail.
Donc je ne pense pas que c'est correct, mais je vous demande StackOverflow de la communauté, à peser.
Il y a un cas spécifique, celui de IE type MIME reniflant que je pense pourrait entraîner un exploit. Après tout, c'est à dire 7 avait encore la "fonction" que les balises de script incorporé dans l'image, les commentaires ont été exécutés indépendamment de l'-tête Content-Type. Nous allons également laisser tel clairement stupide comportement de côté au début.
Sûrement le JSON serait analysée par le JavaScript natif de l'analyseur (Fenêtre.JSON dans Firefox) ou par un eval() que par l'ancienne valeur par défaut de jQuery comportement. Dans aucun de ces cas, l'expression suivante suite à l'alerte en cours d'exécution:
{"myJSON": "legit", "someParam": "12345<script>alert(1)</script>"}
Ai-je raison ou je me trompe?