前言
最近看到一篇关于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
。