一尘不染

框架克星克星…需要克星码

html

假设您不希望其他网站将您的网站“框”为<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程序员,所以这对您来说是我的挑战: 嘿,克星,您能破坏帧破坏器吗?


阅读 385

收藏
2020-05-10

共1个答案

一尘不染

我不确定这是否可行-但是,如果您无法打破框架,为什么不显示警告。例如,如果您的页面不是“首页”,则创建一个setInterval方法来尝试破坏框架。如果经过3或4次尝试后,您的页面仍不是首页,请创建一个div元素,该元素会覆盖整个页面(模式框),并显示一条消息和一个链接,例如…

您正在未经授权的框架窗口中查看此页面-(等等)潜在的安全问题)

点击此链接可解决此问题

不是最好的,但是我看不出他们可以用哪种方式来摆脱困境。

2020-05-10