我正在开发一个 chrome 扩展,我想绕过 iFrame 检测(即 buster)脚本。
我能够绕过这个检测:
if (top !== self) {
//break out
}
在顶部注入(inject)这段代码:
window.self = window.top;
但是如果我有这样的东西怎么办:
if (window != top) {
//break out
}
如何重新定义 window
?
最佳答案
您不能重新定义 window
和 top
全局对象的属性
window
本质上是对 window
的引用全局窗口对象的属性 ( window.window
)。此属性被定义为不可配置和不可重写。您可以通过执行 Object.getOwnPropertyDescriptor(window, "window")
来验证这一点在控制台中。 configurable: false
和 writable: false
属性意味着任何修改它的尝试都将失败(返回值 false
或在严格模式下出错)。 window
的这种行为specification of the Window object 需要属性.
top
窗口的属性也是不可配置和不可重写的,因此您也无法覆盖它。 (另一方面,parent
和 self
可以被覆盖。)
您似乎在尝试找到一种普遍可用的方法来愚弄 framebusters。这对我来说似乎是一项不可能完成的任务。您也许能够以某种方式拦截 <script>
元素并在代码执行之前从代码中删除 iframe 检测,但即使您成功地针对某些 framebusters 这样做了,总会有其他一些您的扩展不会处理。
关于javascript - 绕过 iFrame 破坏脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643343/