【问题标题】:XSS security. Communication between 2 iframes from the same domainXSS 安全性。来自同一域的 2 个 iframe 之间的通信
【发布时间】:2010-02-02 19:44:03
【问题描述】:

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

【问题讨论】:

    标签: javascript security iframe xss


    【解决方案1】:

    嗯,这取决于你所说的交流是什么意思。似乎某种类型的通信是可能的。这是一个例子: 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帧的内容。

    【讨论】:

      【解决方案2】:

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

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

      这真的很烦人,因为您必须让每个文档都识别自己并指明它何时以及向谁发送消息。真的是最后的手段。

      【讨论】:

      • 不,您只需要继续查看轮询循环 (setInterval)。
      • 请记住,如果 cookie 变大,它们会破坏请求(一组请求标头的大小有限制)。
      • 我建议使用 localStorage 或 sessionStorage 而不是 cookie。
      【解决方案3】:

      是的,因为要获得对另一个框架中文档的引用,您必须使用父文档。

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

      访问同级框架还可能让您确定父文档已加载的其他域,这可能被解释为漏洞。

      【讨论】:

      • abc.com 域上允许 zxy.com 的 crossdomain.xml 文件是否可以解决问题?
      • 我对跨域策略文件了解不多,但我想如果浏览器支持的话应该可以的。
      • 不。 crossdomain.xml 用于 Flash,不影响 JS 同源策略。 PS。这是window.parent
      【解决方案4】:

      根据同源策略 (SOP),iframe 将无法通过 javascript 从主页获取任何内容。

      但是,他们将能够使用您的 cookie(这称为 CSRF)对您的服务器进行 POST(在某种程度上是 GET)调用。因此,为了您的安全,不要只依赖会话 cookie。

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

      【讨论】:

        猜你喜欢
        • 2011-10-01
        • 2012-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多