假设你不希望其他网站在<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()
触发一次,如果它看到计数器增加,则将当前位置更改为攻击者控制的服务器我的问题是——这更像是一个JavaScript谜题,而不是一个实际的问题——你如何打败帧破坏破坏者?
我有一些想法,但在我的测试中没有什么管用:
onbeforeunload = null
清除onbeforeunload
事件没有效果alert()
停止进程,让用户知道它正在发生,但不以任何方式干扰代码;单击OK,让破坏照常进行setInterval()
定时器我不是一个JavaScript程序员,所以这是我对你的挑战:老兄,你能抓到那个捣蛋鬼吗?