Il empêche la divulgation de la réponse en JSON détournement.
En théorie, Google réponses JSON sont protégés par la Même Origine: les pages d'un domaine ne peut pas obtenir toutes les informations à partir des pages web sur un autre domaine (sauf si explicitement autorisé).
Un attaquant peut demander des pages sur d'autres domaines, en votre nom, par exemple en utilisant un <script src=...>
ou <img>
balise, mais il ne peut pas obtenir aucune information sur le résultat (en-têtes, contenu).
Ainsi, une page de l'attaquant ne pouvait pas lire votre e-mail de gmail.com lors de la visite.
Sauf que lors de l'utilisation d'une balise de script pour demander le contenu JSON, le JSON est exécuté en Javascript dans un agresseur environnement contrôlé. Si l'attaquant peut remplacer le Tableau ou l'Objet constructeur ou d'une autre méthode utilisée lors de la construction d'objets, rien dans le JSON passera par un code malveillant, et être divulgués.
Notez que ce qui se passe au moment le JSON est exécuté comme Javascript, pas au moment où elle est analysée.
Il y a plusieurs contre-mesures:
S'assurant que le JSON n'est jamais exécuté
En plaçant un while(1);
déclaration avant le JSON de données, Google permet de s'assurer que les données JSON n'est jamais exécutée comme Javascript.
Seulement légitime de la page pourrait effectivement obtenir l'ensemble du contenu, de la bande de l' while(1);
, et d'analyser le reste de JSON.
S'assurant que le JSON n'est pas valide Javascript
De même, l'ajout d'invalide les jetons avant le JSON, comme &&&START&&&
, fait en sorte qu'il n'est jamais exécutée.
Toujours retour JSON avec un Objet à l'extérieur
C'est - OWASP
recommandé pour protéger du JSON, du détournement et la moins intrusive.
De façon similaire à la précédente contre-mesures, il permet de s'assurer que le JSON n'est jamais exécutée comme Javascript.
Un JSON valide objet, une fois n'est pas entouré par quoi que ce soit, n'est pas valide en Javascript:
eval('{"foo":"bar"}')
// SyntaxError: Unexpected token :
Ce n'est cependant valable JSON:
JSON.parse('{"foo":"bar"}')
// Object {foo: "bar"}
Donc, assurez-vous toujours renvoyer un Objet le plus haut niveau de la réponse permet de s'assurer que le JSON n'est pas valide Javascript, tout en restant JSON valide.
Comparaison des méthodes ci-dessus
L'OWASP moyen est moins intrusif, qu'il n'a pas besoin de la bibliothèque du client changements, et les transferts JSON valide. Il n'est pas sûr que le passé ou l'avenir navigateur bugs pouvaient vaincre cela, cependant.
Google de la manière nécessite de la bibliothèque du client pour prise en charge automatique de la sérialisation, et peut être considéré comme plus sûr à l'égard de bogues de navigateur.
Les deux méthodes nécessitent des modifications de serveur dans le but d'éviter aux développeurs d'envoi accidentel vulnérables JSON.