帧巴斯特巴斯特 ...需要破坏者代码
假设您不希望其他网站将您的网站“框架”在:<iframe>
<iframe src="http://example.org"></iframe>
因此,您将反框架,框架破坏JavaScript插入到所有页面中:
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
非常好!现在,您可以自动“破坏”或突破任何包含的iframe。除了一个小问题。
事实证明,您的帧破坏代码可以被破坏,如下所示:
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://example.org/page-which-responds-with-204'
}
}, 1)
</script>
此代码执行以下操作:
- 每次浏览器尝试通过事件处理程序离开当前页面时递增计数器
window.onbeforeunload
- 设置一个计时器,该计时器通过 每毫秒触发一次,如果它看到计数器递增,则将当前位置更改为攻击者控制的服务器
setInterval()
- 该服务器提供HTTP状态代码为204的页面,这不会导致浏览器导航到任何地方
我的问题是 - 这更像是一个JavaScript难题而不是一个实际问题 - 你怎么能打败破坏框架的破坏者?
我有一些想法,但在我的测试中没有任何效果:
- 试图通过 清除事件没有效果
onbeforeunload
onbeforeunload = null
- 添加一个停止的进程,让用户知道它正在发生,但没有以任何方式干扰代码;单击“确定”可让破坏继续正常进行
alert()
- 我想不出任何清除计时器的方法
setInterval()
我不是一个JavaScript程序员,所以这是我对你的挑战:嘿,buster,你能打破破坏框架的破坏者吗?