【问题标题】:prevent iframe from changing parent location防止 iframe 更改父位置
【发布时间】:2017-02-02 07:56:11
【问题描述】:

假设http://a.com/foo 包含<iframe src="http://b.com/bar">

有时 b.com/bar 会跳出它的框架:顶级窗口将从 a.com/foo 重定向到 b.com/bar。我不知道b.com是怎么做到的。

我认为跨域 iframe 不可能干扰父级,除非父级通过 postMessage 进行合作。更改窗口位置是否不受此限制?

如果发生这种情况,a.com 如何防止这种重定向?我控制a.com,但不能修改b.com。

如果不是这样,我如何才能知道 b.com 正在做什么来实现重定向?

强制 b.com 将自身加载到新窗口中或破坏其对 topparent 对象的访问是可以接受的。 b.com 行为的其他降级可能是可以接受的。

【问题讨论】:

  • 有趣,虽然基本的反框架破坏 204 技巧在我的 FF11 中不起作用(所有导航都被阻止)。
  • 页面最终会获胜;即使它不能破坏你的框架破坏者破坏者,它也可以决定隐藏自己或重定向到令人反感的东西。

标签: javascript html iframe


【解决方案1】:

家长可以在iframe上使用sandbox属性:
http://www.w3schools.com/TAgs/att_iframe_sandbox.asp

那么iframe 将不再能够重定向父级。

【讨论】:

    【解决方案2】:

    可能发生的情况是 b.com 内的链接具有 Target='_parent' 属性。 这将使窗口/iframe 父级更新。

    如果您控制 b.com - 确保您的所有目标都是 _self。

    【讨论】:

      【解决方案3】:

      这就是所谓的“框架破坏”。据说有技术可以阻止这种情况(http://seclab.stanford.edu/websec/framebusting/index.php)。

      也许您可以使用 ajax 或类似方法将框架的内容加载到您的页面中,而不是 iframe?

      【讨论】:

        【解决方案4】:

        如果我创建 a.com/proxy.php 将使用 cURL 获取 b.com,则 ajax 解决方案可以工作。

        优点:

        • 可以更改或删除任何脚本
        • 可以调整b.com内容(预览模式)
        • 可以绕过跨域 iframe 限制

        缺点:

        • b.com 上的 cookie/会话将不可用
        • b.com 可能需要脚本来创建其内容
        • 带宽负担
        • 编写代码以使 href 工作

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 2019-04-17
          • 2023-03-19
          • 2013-03-12
          • 2014-08-28
          • 2016-07-28
          相关资源
          最近更新 更多