【问题标题】:Preventing frame busting with access to page source通过访问页面源来防止框架破坏
【发布时间】:2011-05-27 05:23:36
【问题描述】:

所以我们在 iframe 中加载页面。此子页面是从与父页面位于同一域的缓存中加载的。但是,外部资产不会在本地缓存,而是从外部站点加载 - 包括 javascript。在一个站点中,我们有框架破坏代码:

if (top.location != self.location) {

    top.location = self.location
}

现在我知道我们可以使用来自coderr 的解决方案,但我不确定会产生什么影响/连锁问题。鉴于我们可以访问缓存的子页面,我想知道是否可以向子页面添加任何内容以覆盖任何方法或值,以便将帧破坏呈现为 null。例如,在孩子的<head> 中,我尝试添加以下内容:

<script type="text/javascript">
    top.location = self.location
</script>

self.location = top.location

产生了非常可怕的结果(第一个示例中的无限嵌套,第二个示例中的浏览器完全崩溃)。

对于我们可以添加到孩子中以消除框架破坏的代码有什么建议吗?

否则,我们将不得不缓存 js 并解析/替换 framebusting 脚本。

谢谢

R.

请 - 这是合法的!

【问题讨论】:

标签: javascript iframe framebusting


【解决方案1】:

使用 Tampermonkey 进行简单的文本替换

document.body.innerHTML = document.body.innerHTML.replace(/original/g,"new");

如果使用正则表达式版本(替换文档中的所有匹配项),则需要使用 \ 符号转义 /" 等特殊字符。

仅替换一次:

var find = "if (top.location!=location) { top.location.href = location.href; }";
replace = "";
document.body.innerHTML = document.body.innerHTML.replace(find,replace);

这不适用于顶部有 &lt;script&gt; 的页面。

确保设置了@run-at document.start

【讨论】:

    【解决方案2】:

    不久前,我看到了 Jeff Atwood 的一篇非常有趣的帖子,他谈到了一种“不可能”来对抗反框架破坏技术:

    http://www.codinghorror.com/blog/2009/06/we-done-been-framed.html

    它甚至不需要对子框架代码的特权访问!

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 2015-07-05
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2013-10-14
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多