第5章 点击劫持(ClickJacking)
1、点击劫持
点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
2、图片覆盖攻击
点击劫持的本质是一种视觉欺骗。顺着这个思路,还有一些攻击方法也可以起到类似的作用,比如图片覆盖(XSIO)。
XSIO利用的是图片的style,或者能够控制CSS。如果应用没有限制style的position为absolute的话,图片就可以覆盖到页面上的任意位置,形成点击劫持。
由于<img>标签在很多系统中是对用户开放的,因此在现实中有非常多的站点存在被XSIO攻击的可能。在防御XSIO时,需要检查用户提交的HTML代码中,<img>标签的style属性是否可能导致浮出。
3、拖曳劫持与数据窃取
“拖曳劫持”的思路是诱使用户从隐藏的不可见iframe中“拖曳”出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面中,从而窃取数据。
4、ClickJacking 3.0:触屏劫持
智能手机上的"触屏劫持"攻击被称为TapJacking。
5、防御ClickJacking
一般是通过禁止跨域的iframe来防范。
frame busting:可以写一段JavaScript代码,以禁止iframe的嵌套。这种方法叫frame busting。
比如下段代码:
if( top.location != location ){
top.location = self.location;
}
但是由于它是用JavaScript写的,控制能力并不是特别强,有许多方法可绕过。
X-Frame-Option:使用一个HTTP头—X-Frame-Option,可以说它是为了解决ClickJacking而生的。
它有三个可选的值:DENY、SAMEORIGIN、ALLOW-FROM origin
当值为DENY时,浏览器会拒绝当前页面加载任何frame页面;若值为SAMEORIGIN,则frame页面的地址只能为同源域名下的页面;若值为ALLOW-FROM,则可以定义允许frame加载的页面地址。
除了X-Frame-Options之外,Firefox的"Content Security Policy"以及Firefox的NoScript扩展也能够有效防御ClickJacking,这些方案为我们提供了更多的选择
6、小结
ClickJacking相对于XSS与CSRF来说,因为需要诱使用户与页面产生交互行为,因此实施成本更高。