XSS安全性。来自同一域的2个iframe之间的通信

时间:2010-02-02 19:44:03

标签: javascript security iframe xss

域名abc.com有一个包含2个iframe的页面。它们都是从域xyz.com加载的。 XSS安全会阻止这两个iframe之间的JavaScript访问/通信/交互吗?

4 个答案:

答案 0 :(得分:6)

嗯,这取决于你沟通的意思。似乎某种类型的沟通是可能的。这是一个例子: 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已命名,我们可以在第2帧中执行此操作:

<a href="javascript:alert(document.body.innerHTML)" target="test1">click me</a>

所以我们点击第2帧中的链接,但会显示第1帧的内容。

答案 1 :(得分:4)

正如Joel所说,Same Origin Policy将阻止访问父窗口。

可以使用Cookie在同一域中的不同文档/框架/窗口上的客户端脚本之间建立通信通道。一个文档设置document.cookie来编写一个cookie,然后另一个文档在间隔轮询器上读取document.cookie,找到其中的新内容,并将其视为一条消息。

这真的很烦人,因为你必须让每个文件都能识别自己并发出信息,告知它何时以及向谁发送信息。真的是最后的手段。

答案 2 :(得分:3)

是的,因为要获取对其他框架中文档的引用,您必须使用父文档。

var otherDocument = window.parent.frames[x].document;
// this will fail ---------^

访问兄弟框架还可能允许您确定父文档已加载的其他域,这可能被视为漏洞。

答案 3 :(得分:0)

iframe将无法通过相同来源政策(SOP)的javascript从主页获取任何内容。

但是,他们可以使用您的cookie(这称为CSRF)对您的服务器进行POST(GET到某些范围)调用。因此,为了您的安全,请不要只依赖会话cookie。

防止出现这种情况的好方法是在主页中添加一个令牌(iframe不可见),并将其传递给服务器的每次调用。