第5章 点击劫持(clickjacking)
5.1 什么是点击劫持
点击劫持是一种视觉上的欺骗手段。是一种在网页中将恶意代码等隐藏在看似无害的内容(如按钮)之下,并诱使用户点击的手段。
主要特征
q 点击劫持是一种恶意攻击技术,用于跟踪网络用户,获取其私密信息或者通过让用户点击看似正常的网页来远程控制其电脑。很多浏览器和操作平台都有这样的漏洞。
q 点击劫持技术可以用嵌入代码或者文本的形式出现,在用户毫不知情的情况下完成攻击,比如点击一个表面显示是“播放”某个视频的按钮,而实际上完成的操作却是将用户的社交网站个人信息改为“公开”状态。
q 点击劫持这个词首次出现在2008年,是由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼首创的,这个词其实是“点击”(click)和“劫持”(hijacking)两个词组合而成的。
5.2 Flash点击劫持
5.3 图片覆盖攻击
点击劫持的本质是一种视觉欺骗。顺着这个思路,还有一些攻击方法也可以起到类似的作用,比如图片覆盖。
由于<img>标签在很多系统中是对用户开放的,因此在现实中有非常多的站点存在被XSIO攻击的可能。在防御XSIO时,需要检查用户提交的HTML代码中,<img>标签的style属性是否可能导致浮出。
5.4 拖拽劫持与数据窃取
"拖拽劫持"的思路是诱使用户从隐藏的不可见iframe中"拖拽"出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面中,从而窃取数据。
在JavaScript或者Java API的支持下,这个攻击过程会变得非常隐蔽。因为它突破了传统ClickJacking一些先天的局限,所以这种新型的"拖拽劫持"能够造成更大的破坏。
5.5 ClickJacking 3.0:触屏劫持
智能手机上的"触屏劫持"攻击被称为TapJacking。
5.6 防御clickjacking
5.6.1 frame busting
通过js代码禁止iframe的嵌套。该方法不是很实用。
if (top !==window)
top.location = window.location.href;
ClickJacking是一种视觉上的欺骗,那么如何防御它呢?针对传统的ClickJacking,一般是通过禁止跨域的iframe来防范
5.6.2 x-frame-options
在header中增加 X-Frame-Options SAMEORIGIN。
它有三个可选的值:
q DENY
q SAMEORIGIN
q ALLOW-FROM origin
当值为DENY时,浏览器会拒绝当前页面加载任何frame页面;若值为SAMEORIGIN,则frame页面的地址只能为同源域名下的页面;若值为ALLOW-FROM,则可以定义允许frame加载的页面地址。
除了X-Frame-Options之外,Firefox的"Content Security Policy"以及Firefox的NoScript扩展也能够有效防御ClickJacking,这些方案为我们提供了更多的选择