Javascript 什么';反跨域策略的重点是什么?

Javascript 什么';反跨域策略的重点是什么?,javascript,security,dom,cross-domain,same-origin-policy,Javascript,Security,Dom,Cross Domain,Same Origin Policy,为什么HTMLDOM和/或Javascript的创建者决定不允许跨域请求 我可以看到不允许它的一些非常小的安全好处,但从长远来看,这似乎是试图让Javascript注入攻击的威力更小。这对于JSONP来说是毫无意义的,它只是意味着javascript代码的编写要稍微困难一点,而且您必须进行服务器端合作(尽管它可能是您自己的服务器)当允许跨域脚本编写(或被聪明的Javascripter攻击)时,一个网页可以从另一个网页访问数据。示例:当你打开mail.google.com时,joeblow.com

为什么HTMLDOM和/或Javascript的创建者决定不允许跨域请求


我可以看到不允许它的一些非常小的安全好处,但从长远来看,这似乎是试图让Javascript注入攻击的威力更小。这对于JSONP来说是毫无意义的,它只是意味着javascript代码的编写要稍微困难一点,而且您必须进行服务器端合作(尽管它可能是您自己的服务器)

当允许跨域脚本编写(或被聪明的Javascripter攻击)时,一个网页可以从另一个网页访问数据。示例:当你打开mail.google.com时,joeblow.com可以访问你的Gmail。joeblow.com可以阅读您的电子邮件、发送垃圾邮件、欺骗您的邮件、删除您的邮件或任何数量的坏事。

实际的跨域问题是巨大的。假设SuperBank.com在内部向
http://www.superbank.com/transfer?amount=100&to=123456
将10000美元转账至账号123456。如果我能让你访问我的网站,并且你在SuperBank登录,我所要做的就是向SuperBank.com发送一个AJAX请求,将数千美元从你的帐户转移到我的帐户


JSON-p可以接受的原因是它不可能被滥用。一个使用JSON-P的网站几乎将数据声明为公共信息,因为这种格式太不方便了,无法以其他方式使用。但是,如果不清楚数据是否是公共信息,浏览器必须假定它不是。这里有一个区别:跨域AJAX允许恶意站点让浏览器代表它访问内容,而JSON-p允许恶意服务器篡改单个域的页面(并使浏览器代表您对该域执行操作)但(关键一点)仅当所服务的页面特意加载恶意负载时


是的,JSON-p有一些安全隐患,但严格来说,它们是网站使用的一部分。允许通用跨域AJAX会带来更大的麻烦。

将问题中的一些想法澄清到特定的用例中

跨域策略通常不是为了保护您不受自己的影响,而是为了保护您网站的用户不受您网站(XSS)的其他用户的影响

假设你有一个网站,允许人们输入他们想要的任何文本,包括javascript。一些恶意用户决定在“关于你自己”中添加一些javascript字段。您网站的用户将浏览他的个人资料,并在其浏览器上执行此脚本。此脚本代表您的网站执行,因此可以从您的网站访问cookie等


如果浏览器允许跨域通信,则此脚本理论上可以收集您的信息,然后将其上载到恶意用户将拥有的服务器。

停止您正在做的任何事情,在您完全理解此问题之前,不要再编写一行HTML或Javascript。编写安全代码,第二版,第13章是一个gr吃一点关于这些问题的入门知识。好吧,我明白你的意思了。为什么他们不这样做,让跨域请求不会收到cookies呢?或者其他一些比完全禁止更合理的东西?@Earlz-我不确定我有一个完整的答案,但作为一个拥有相当多白帽黑客经验的人,我可以合作我想出了一些可以滥用简单的无cookie AJAX请求的方法。例如,谷歌会在搜索中跟踪你的IP,如果你发送太多请求,就会暂时禁止你。即使没有cookie,我也可以代表你向谷歌发送数千个搜索请求,并欺骗它禁止你。我相信还有其他服务甚至会这样做使用IP进行更深入的跟踪,可能最终会泄漏敏感数据。@Earlz-此外,JSON-P是一个非常强大的选择加入系统,因此不需要其他任何东西。Adobe提出了Flash,但HTML/JS实际上并不需要一个等价物,因为我们已经足够聪明地提出了一个。你也可以通过只是不断地(用一个img标签或类似的标签)得到一个带有
?timestamp=..
的页面,然后被禁止。@Earlz-很有趣。这只是一个随机的例子。不过,如果我在制作浏览器,我就不会冒险去消除cookies是否足够了。