前言

最近看到一篇关于Clickjacking的某些浏览器不支持特性而产生的漏洞,故查查资料,记录下这些。

重点在于Clickjacking的三种防御手段

什么是点击劫持(Clickjacking)

一种视觉欺骗手段,通过frame框架包含目标网站。诱使受害者点击页面,造成一些敏感操作,例如转账,泄露个人信息等,而这时,受害者并不知道自己进行了这些操作。

例如上图,具体代码为

1
<iframe src="http://www.bywalks.com" sandbox="allow-forms"></iframe>

我们可以修改下透明度,并在iframe框架之上加一些图片或者一些按钮操作,来诱使用户进行一些操作。

如何防御

  • JS代码
1
2
3
if(top.location!=self.locaton) {
parent.location = self.location;
}

这种防御手段并不严谨,可以用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-OptionsDeny或者SameOrigin