通过访问页面源来防止帧破坏

时间:2010-12-17 16:12:45

标签: javascript iframe framebusting

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

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

    top.location = self.location
}

现在我知道我们可以使用来自coderr的解决方案,但我不确定问题的影响/敲定是什么。鉴于我们可以访问缓存的子页面,我想知道是否有任何东西我们可以添加到子代中以覆盖任何方法或值,以便渲染null framebusting。例如,在孩子的<head>我尝试添加此内容:

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

self.location = top.location

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

对于我们可以添加给孩子的代码是否有任何建议可以使框架取消?

否则,我们必须缓存js并解析/替换framebusting脚本。

由于

R上。

请 - 这是合法的!!

2 个答案:

答案 0 :(得分:4)

前一段时间,我遇到了杰夫阿特伍德的一篇非常有趣的帖子,在那里他讲述了一个“不可能”来反击反框架破坏技术:

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

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

答案 1 :(得分: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已设置。