为啥不允许跨域 AJAX 调用?

Posted

技术标签:

【中文标题】为啥不允许跨域 AJAX 调用?【英文标题】:Why Cross-Domain AJAX call is not allowed?为什么不允许跨域 AJAX 调用? 【发布时间】:2011-07-19 23:25:37 【问题描述】:

除了 JSONP,为什么要遵循相同的域策略?

【问题讨论】:

重复:Why are AJAX requests limited to same domain? 和 Why is cross-domain Ajax a security concern? What's the point of the Anti-Cross-Domain policy?的可能重复 【参考方案1】:

因为Same origin policy。

存在同源策略以防止恶意使用资源。如果没有管理跨域脚本访问的规则,那么对毫无戒心的用户造成各种破坏将是微不足道的。例如,恶意网站很容易将您的会话信息抓取到另一个站点并代表您执行操作。

举个例子,考虑一下:

您访问您最喜欢的网络邮件程序 - 它可以是 Gmail、Yahoo 邮件、Hotmail 或私人内部公司网络邮件程序。

登录并检查您的电子邮件后,您单击指向恶意网站的链接,该网站在新标签页中打开。

恶意网站检查 http 引用并发现您来自您的电子邮件帐户。

使用跨域脚本,恶意网站会回到您的电子邮件选项卡并下载您的地址簿和所有电子邮件(或者在您关闭弹出窗口之前可以获取的任何电子邮件)。

随后,在扫描您的电子邮件以获取密码、财务数据和其他敏感材料后,它会向您的所有联系人发送一封您认可同一网站的电子邮件。 这只是一个例子。更阴险的情节是恶意第三方利用您的浏览器爬取您公司的内网,将您作为不知情的帮凶泄露机密信息!

更多关于http://jimbojw.com/wiki/index.php?title=Introduction_to_Cross-Domain_Ajax

【讨论】:

【参考方案2】:

出于安全原因,已实施同源政策​​;引用wikipedia的相关句子

这种机制具有特定的 现代网络的意义 广泛依赖的应用程序 在 HTTP cookie 上维护 经过身份验证的用户会话,如 服务器根据 HTTP cookie 进行操作 泄露敏感信息 信息或采取状态改变 行动。 严格的分离 在不相关提供的内容之间 网站必须在客户端维护 侧面防止数据丢失 机密性或完整性。

基本上,您不希望任何给定的网站 (就像您可能正在浏览的任何网站一样 - 我们都知道人们有时会访问您不应该信任的网站)访问来自任何其他人的数据(例如您的网络邮件或社交网络上的帐户)

【讨论】:

使用新鲜的 cookie 能否轻松避免安全问题?

以上是关于为啥不允许跨域 AJAX 调用?的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:允许跨域 AJAX 请求

ajax 跨域

AJAX跨域问题解决方法——被调用方解决跨域

AJAX跨域

使用 jQuery 和 AJAX 的跨域 PHP 调用

JSAJAX跨域-被调用方与调用方解决方案