通过访问页面源防止帧破坏
所以我们在一个iframe中加载一个页面。 此子页面从与父项相同的域上的缓存中加载。 但是,外部资源不会在本地缓存,而是从外部网站加载 - 包括JavaScript。 在一个网站中,我们有框架破解代码:
if (top.location != self.location) {
top.location = self.location
}
现在我知道我们可以使用编码器的解决方案,但我不确定这会对问题产生何种影响/敲门声。 考虑到我们有权访问缓存的子页面,我想知道是否有任何我们可以添加到子项的方法来覆盖任何方法或值,以便使框架渲染为null。 例如,在孩子的<head>
中,我尝试添加这个:
<script type="text/javascript">
top.location = self.location
</script>
和
self.location = top.location
结果非常可怕(第一个示例中无限嵌套,第二个中完全和完整的浏览器崩溃)。
有没有我们可以添加给孩子的代码的任何建议,以消除这个尴尬?
否则,我们必须缓存js并解析/替换framebusting脚本。
谢谢
R.
并请 - 这是合法的!
前一段时间,我偶然遇到了Jeff Atwood的一篇非常有趣的帖子,他谈到了一个“不可能”的方法来打击反架构破坏技术:
http://www.codinghorror.com/blog/2009/06/we-done-been-framed.html
它甚至不需要特权访问子框架的代码!
用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
。