JAVA年度安全 第五周 防止“点击劫持”(ClickJacking)

JAVA年度安全 第五周 防止“点击劫持”(ClickJacking

http://www.jtmelton.com/2012/02/03/year-of-security-for-java-week-5-clickjacking-prevention/

What is it and why do I care?

点击劫持是一种“web framing" 或者 "UI redressing" 攻击。简单来说:

1、用户(受害者)访问一个无害、有诱惑内容的网页(例如观看在线video

2、另一个页面被设置在这个页面的最上层,而且是透明的

3、当用户认为点击的是他们所看到的web页面(视频),实际上他们点击的是最上层透明的页面(frame)--国内很多网站都是这样,下载一个软件要弹窗N次,还好有adblock

这种攻击很聪明,在攻击实际的执行过程中有些很有趣的细节(下面的参考文档有更详细的信息),在这里,我关注如何阻止这种攻击。

What should I do about it?

对于“点击劫持”现在还没有完美的解决方案,如果用户把浏览器升级到新版,情况就会好些。有如下2点建议:

1、使用X-Frame-Options HTTP header--详见:http://book.51cto.com/art/201204/330077.htm

2、使用frame busting代码--详见: http://book.51cto.com/art/201204/330076.htm

接下来会有一篇关于X-Frame-Options HTTP header的文章。目前来看使用这个header是更可靠的解决方案,但是这需要使用一个比较新版的浏览器。幸运的是用户逐渐使用了新版浏览器,这个问题也随之被改善了。

至于frame busting的方案,并不可靠,但依然需要做。在某种程度上提上了攻击的门槛。framebusting代码有很多实现方式,来自斯坦福的同志们把这些方案汇集到http://seclab.stanford.edu/websec/framebusting/ 中,并且在真实环境中评估这些代码、给出破解方案,在论文中他们提出自己的解决方案。在这里我就不说代码了,在论文的第11页已经给出。有2个基本点:

a) 使用样式表css禁止显示页面的body

b) 使用javascript根据是否为framed页面来决定是否显示,不是则显示body,否则跳出frame通过重定向来展示页面。


问题是国内的网站故意让用户点击,然后弹窗广告,这些方案是给君子用的。。。


这个方案很可能被攻破,但是目前是最好的选择。

很不幸的,“点击劫持”是一种不能完全解决的问题,但是通过同时使用多种方案,可以实现某种程度的可靠性。

注(2/3/2012):斯坦福的方法不能完全兼容所有版本的IE-这是August Detlefsen 提供的更新版:https://www.codemagi.com/blog/post/194


References

———–
https://www.owasp.org/index.php/Clickjacking
http://seclab.stanford.edu/websec/framebusting/
http://michael-coates.blogspot.com/2010/08/x-frame-option-support-in-firefox.html
https://www.codemagi.com/blog/post/194


你可能感兴趣的:(security)