脚本标签工作时为什么禁止跨域ajax?

时间:2011-02-23 12:20:22

标签: javascript security xmlhttprequest

由于在脚本标记中使用JSONP直接从其他域获取数据是直截了当的,我们不应该允许XMLHttpRequest也这样做吗?声称它可以解决它时加强安全性没有多大意义,尽管语义更加混乱。

2 个答案:

答案 0 :(得分:8)

JSONP仅在提供商允许时才有效。

如果跨域AJAX工作,首先问题之一就是人们发布到其他域名,希望你在那里有一个经过身份验证的帐户。这是CSRF。

他们可以获取一个经过身份验证的页面,获取您的令牌,然后使用您的令牌发送恶意内容(告诉应用程序这是一个内部请求)。

答案 1 :(得分:3)

实际上JSOP是针对相同原始策略的局限性的一个聪明的解决方法,但它基本上是一种自我造成的跨侧脚本攻击(请记住,JSONP通过使用脚本标签而不是XHR来进行,因此您可以完全控制你的整个页面都是你的JSONP数据提供者 - 通常他们不是邪恶的,但有时他们是无能的,所以记住这一点。)

关于如何在新版本的ECMAScript中修复相同的源策略有很多讨论,因为如果必须绕过它来制作任何类型的mashup,它显然不起作用。在我看来,一个有趣的想法是拥有一个更便宜的XHR版本,它不会发送cookie或无用的头文件,因此可以防止跨站点请求伪造攻击,但仍然允许安全的mashup,而不会让数据提供者完全访问你的页面。但我们还是要等待它。