【发布时间】:2010-02-02 19:44:03
【问题描述】:
域 abc.com 有一个包含 2 个 iframe 的页面。它们都是从域 xyz.com 加载的。 XSS 安全性会阻止这两个 iframe 之间的 JavaScript 访问/通信/交互吗?
【问题讨论】:
标签: javascript security iframe xss
域 abc.com 有一个包含 2 个 iframe 的页面。它们都是从域 xyz.com 加载的。 XSS 安全性会阻止这两个 iframe 之间的 JavaScript 访问/通信/交互吗?
【问题讨论】:
标签: javascript security iframe xss
嗯,这取决于你所说的交流是什么意思。似乎某种类型的通信是可能的。这是一个例子: www.abc.com 上的 HTML:
<iframe name="test1" src="http://www.xyz.com/frame1.html">
<iframe name="test2" src="http://www.xyz.com/frame2.html">
因为 iframe 已命名,我们可以在 frame2 中执行此操作:
<a href="javascript:alert(document.body.innerHTML)" target="test1">click me</a>
所以我们点击了第2帧的链接,但是显示的是第1帧的内容。
【讨论】:
正如 Joel 所说,Same Origin Policy 将阻止对父窗口的访问。
您可以通过使用 cookie 在来自同一域的不同文档/框架/窗口上的客户端脚本之间设置通信通道。一个文档设置document.cookie 写入cookie,然后另一个文档在间隔轮询器上读取document.cookie,在其中找到新内容并将其视为消息。
这真的很烦人,因为您必须让每个文档都识别自己并指明它何时以及向谁发送消息。真的是最后的手段。
【讨论】:
是的,因为要获得对另一个框架中文档的引用,您必须使用父文档。
var otherDocument = window.parent.frames[x].document;
// this will fail ---------^
访问同级框架还可能让您确定父文档已加载的其他域,这可能被解释为漏洞。
【讨论】:
crossdomain.xml 用于 Flash,不影响 JS 同源策略。 PS。这是window.parent。
根据同源策略 (SOP),iframe 将无法通过 javascript 从主页获取任何内容。
但是,他们将能够使用您的 cookie(这称为 CSRF)对您的服务器进行 POST(在某种程度上是 GET)调用。因此,为了您的安全,不要只依赖会话 cookie。
防止这种情况的一个好方法是在您的主页中放置一个令牌(对 iframe 不可见),您将其传递给对服务器的每次调用。
【讨论】: