帧Buster…巴斯特码

帧Buster…巴斯特码

假设您不希望其他站点在<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程序员,所以下面是我对您的挑战:嘿,巴斯特,你能把那个破相框的家伙弄坏吗?


慕盖茨4494581
浏览 311回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP