域名abc.com有一个包含2个iframe的页面。它们都是从域xyz.com加载的。 XSS安全会阻止这两个iframe之间的JavaScript访问/通信/交互吗?
答案 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不可见),并将其传递给服务器的每次调用。