前言
最近看到一篇关于Clickjacking的某些浏览器不支持特性而产生的漏洞,故查查资料,记录下这些。
重点在于Clickjacking的三种防御手段
什么是点击劫持(Clickjacking)
一种视觉欺骗手段,通过frame框架包含目标网站。诱使受害者点击页面,造成一些敏感操作,例如转账,泄露个人信息等,而这时,受害者并不知道自己进行了这些操作。

例如上图,具体代码为
1  | <iframe src="http://www.bywalks.com" sandbox="allow-forms"></iframe>  | 
我们可以修改下透明度,并在iframe框架之上加一些图片或者一些按钮操作,来诱使用户进行一些操作。
如何防御
- JS代码
 
1  | if(top.location!=self.locaton) {  | 
这种防御手段并不严谨,可以用double iframe绕过。
- X-Frame-Options
 
该HTTP头配置有三种选项,分别为Deny,SameOrigin,Allow_From。
分别解释一下,Deny拒绝该页面被所有其他页面所包含,SameOrigin为可被同源网页所包含,Allow_From为可被白名单设置网站所包含。
其中Allow_From并不被所有浏览器都支持。浏览器支持如下。

- CSP安全策略
 
CSP安全策略是一种基于减少攻击行为的一种方法。通过具体配置来减少漏洞的发生。
在Clickjacking的防御中,CSP的frame-ancestors也起到了作用,但跟ALLOW_FROM一样,并不是所有的浏览器都支持这个特性。
个人总结
JS与CSP的防御都是有所限制,所以最好的方法就是设置HTTP头的X-Frame-Options为Deny或者SameOrigin。