框架巴斯特巴斯特...需要巴斯特代码

假设您不希望其他网站在<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 = null清除onbeforeunload事件没有效果
  • 添加一个alert()阻止该进程让用户知道它正在发生,但不会以任何方式干扰代码; 点击确定让平铺继续正常
  • 我想不出任何方法来清除setInterval()计时器
  • 我不是一个JavaScript程序员,所以这是我的挑战: 嘿,克星,你可以打破框架破坏者吗?


    我不确定这是否可行 - 但如果你不能打破框架,为什么不显示警告。 例如,如果您的页面不是“首页”,请创建一个试图打破框架的setInterval方法。 如果在3或4次尝试后,你的页面仍然不是首页 - 创建一个div元素,覆盖整个页面(模态框),并带有一条消息和一个链接,如...

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

    点击这个链接来解决这个问题

    不是最好的,但我不认为他们可以通过任何方式制定出他们的出路。


    FWIW,大多数当前的浏览器都支持X-Frame-Options:deny指令,即使在脚本被禁用时也是如此。

    IE8:
    http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx

    Firefox(3.6.9)
    https://bugzilla.mozilla.org/show_bug.cgi?id=475530
    https://developer.mozilla.org/en/The_X-FRAME-OPTIONS_response_header

    镀铬/ Webkit的
    http://blog.chromium.org/2010/01/security-in-depth-new-security-features.html
    http://trac.webkit.org/changeset/42333


    我们在http://seclab.stanford.edu/websec/framebusting/framebust.pdf的一个网站中使用了以下方法

    <style>
     body { 
     display : none   
    }
    </style>
    <script>
    if(self == top) {
    document.getElementsByTagName("body")[0].style.display = 'block';
    }
    else{
    top.location = self.location;
    }
    </script>
    
    链接地址: http://www.djcxy.com/p/10125.html

    上一篇: Frame Buster Buster ... buster code needed

    下一篇: Why is setTimeout(fn, 0) sometimes useful?