我一直想知道XHR跨域限制的目的是什么。
似乎目的是防止恶意注入的Javascript向攻击者发送私有数据。但是,使用注入的script
或img
标记(或任何其他外部资源),可以轻松地将数据发送到任何域。
答案 0 :(得分:10)
如果任意网站可能对您的网站发出XHR电话,则可能发生以下情况:
实际上,即使使用跨域策略,Bob的邪恶网站实际上也可以通过发布表单向您的服务器发送HTTP请求。它将无法看到结果,但如果Bob很聪明,他可能在您的网站中发现了一个URL,允许来自POST的某些活动,即使它不是来自您的某个页面上的表单。这就是跨站请求伪造,这是浏览器无法保护你的东西。
答案 1 :(得分:2)
同一站点安全策略的设计是为了让攻击者能够将恶意脚本注入网页,需要以下其中一项:
如果您构建的网站只引用您自己域中的资源,并且您没有做任何愚蠢的事情,比如接受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)
查看以下维基文章,它可以提供帮助。