假设您不希望其他网站将您的网站“框”在<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程序员,所以这对您来说是我的挑战:嘿,克星,您能破坏帧破坏器吗?
example.org
RFC 2606中指定的域ietf.org/rfc/rfc2606.txt