XHR跨域限制的目的是什么?

时间:2011-07-06 13:34:21

标签: javascript security cross-domain xmlhttprequest

我一直想知道XHR跨域限制的目的是什么。

似乎目的是防止恶意注入的Javascript向攻击者发送私有数据。但是,使用注入的scriptimg标记(或任何其他外部资源),可以轻松地将数据发送到任何域。

4 个答案:

答案 0 :(得分:10)

如果任意网站可能对您的网站发出XHR电话,则可能发生以下情况:

  1. 无辜的用户Alice登录您的安全网站并获取安全会话cookie。
  2. 在另一个浏览器标签中,Alice访问了Bob的邪恶黑客网站(她认为这只是一个Justin Bieber视频)
  3. Bob的页面向您的安全网站发出XHR。如果没有跨域策略,浏览器会向您的网站发出请求 - 包括安全会话cookie - 并检索结果。这些结果可能包括Alice登录您的安全网站时可用的任何内容。
  4. 实际上,即使使用跨域策略,Bob的邪恶网站实际上也可以通过发布表单向您的服务器发送HTTP请求。它将无法看到结果,但如果Bob很聪明,他可能在您的网站中发现了一个URL,允许来自POST的某些活动,即使它不是来自您的某个页面上的表单。这就是跨站请求伪造,这是浏览器无法保护你的东西。

答案 1 :(得分:2)

同一站点安全策略的设计是为了让攻击者能够将恶意脚本注入网页,需要以下其中一项:

  1. 网页引用位于网页域外的脚本或图像资源,攻击者可以控制其中一个外部资源。
  2. 攻击者可以访问网页的主机Web服务器
  3. 或者攻击者可以控制Web服务器和浏览器客户端之间路由上的计算机(用于不安全的http连接)
  4. 如果您构建的网站只引用您自己域中的资源,并且您没有做任何愚蠢的事情,比如接受URL中嵌入的javascript(或SQL)或者对用户输入文本使用javascript eval(),那么''在网页上保持数据隐私的良好状态。

    如果链接到位于不同域的脚本或图像资源,则网站的安全性也取决于该外部域的安全性。

    防止上述#3(中间人攻击)的最佳方法是使用https协议而不是http来保护对服务器(页面,脚本和图像)的所有请求。中间的人无法为目标域生成有效的加密证书,因此浏览器至少可以警告用户该网站有些可疑。

    同一站点安全性的经典案例是将目标网页包装在攻击者的evil.com服务器托管的页面上的iframe中。如果父页面URL和iframe内容URL位于同一个域中,则允许它们相互通信并查看彼此的内部数据,变量,DOM等。如果域不同,则相同域安全策略声明浏览器不应允许iframe查看其父级的任何变量或DOM信息,也不允许父级查看iframe内部的变量或DOM。这是为了防止两个域之间无意或不适当的数据交换。

    如果缺少相同域安全策略,那么攻击者将您的银行网站包装在iframe中会非常简单,导致您误导(发送给您的虚假电子邮件上的链接)以登录通过包装好的网站,随便观察您的所有银行活动。从那里,他们可以在几秒钟内耗尽您的帐户。

    另请注意,XHR最初是作为第三方扩展添加到浏览器环境中的,因此最佳方法是遵循现有的浏览器安全模型来处理客户端请求。 XHR遵循与浏览器用于获取html页面,脚本和图像相同的规则。如果从一开始就将XHR设计到HTML规范中而不是稍后添加,那么XHR可能会有所不同。请参阅HTML5 PostMessage spec作为示例。

答案 2 :(得分:0)

您可以建立一个网站来访问导致DoS的某些网站。这可能是恶意使用交叉XHR之一。

答案 3 :(得分:0)

查看以下维基文章,它可以提供帮助。

http://en.wikipedia.org/wiki/Same_origin_policy