为什么HTML DOM和/或Javascript的创建者决定不允许跨域请求?
我可以看到禁止它的一些非常小的安全性好处,但从长远来看,似乎是尝试使Javascript注入攻击具有更少的权力。无论如何,这对JSONP来说都是没有意义的,它只是意味着javascript代码更难以制作,你必须有服务器端合作(尽管它可能是你自己的服务器)
答案 0 :(得分:11)
实际的跨域问题非常严重。假设SuperBank.com在内部向http://www.superbank.com/transfer?amount=100&to=123456
发送请求,将10,000美元转移到帐号123456.如果我可以访问我的网站,并且您在SuperBank登录,我所要做的就是发送一个AJAX请求SuperBank.com将数千美元从您的账户转移到我的账户。
JSON-P可以接受的原因是滥用它是非常不可能的。使用JSON-P的网站几乎宣称数据是公共信息,因为这种格式太不方便了。但是,如果不清楚数据是否是公共信息,浏览器必须认为数据不是公共信息。
答案 1 :(得分:9)
当允许跨域脚本编写(或由聪明的Javascripter攻击)时,网页可以访问其他网页的数据。示例:当mail.google.com打开时,joeblow.com可以访问您的Gmail。 joeblow.com可以阅读您的电子邮件,垃圾邮件联系人,欺骗您的邮件,删除邮件或任何数量的不良内容。
答案 2 :(得分:1)
将问题中的一些想法澄清到特定用例中。
跨域政策通常不会保护您自己。它用于保护您网站的用户免受您网站的其他用户(XSS)的侵害。
想象一下,你有一个网站,允许人们输入他们想要的任何文字,包括javascript。一些恶意用户决定在“关于你自己”字段中添加一些javascript。您网站的用户将浏览其个人资料并在其浏览器上执行此脚本。此脚本由于代表您的网站执行,因此可以从您的网站访问Cookie等。
如果浏览器允许跨域通信,理论上该脚本可以收集您的信息,然后将其上传到恶意用户将拥有的服务器。
答案 3 :(得分:0)
以下是您的区别:跨域AJAX允许恶意站点代表您的浏览器处理事物,而JSON-P允许恶意服务器篡改单个域的页面(并使浏览器执行操作)代表您到该域名)但是(关键位)只有在提供的页面不加载恶意负载的情况下。
所以是的,JSON-P有一些安全隐患,但他们严格选择使用它们的网站。允许通用的跨域AJAX可以打开更大的蠕虫病毒。