1

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

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

    top.location = self.location
}

现在我知道我们可以使用coderr的解决方案,但我不确定它的含义/连锁问题是什么。鉴于我们可以访问缓存的子页面,我想知道是否可以向子页面添加任何内容,以便覆盖任何方法或值,以便将 framebusting 呈现为 null。例如,在<head>我尝试添加这个的孩子中:

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

self.location = top.location

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

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

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

谢谢

R。

请 - 这是合法的!

4

2 回答 2

4

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

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

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

于 2010-12-17T16:16:17.700 回答
0

使用 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);

这不适用于<script>顶部位于头部的页面。

确保@run-at document.start已设置。

于 2016-11-05T19:10:22.823 回答