Web应用安全之点击劫持(CLICKJACKING)与X-FRAME-OPTIONS HEADER
文/玄魂
目录
前言...
1.1 点击劫持(clickjacking attacks)...
1.2 Frame Bursters.
1.3 The X-Frame-Options.
1.3.1 X-Frame-Options.
1.3.2 Apache配置X-Frame-Options.
1.3.3 Nginx 配置X-Frame-Options.
1.3.4 IIS配置X-Frame-Options.
1.4 浏览器兼容性...
前言
本文整理改编自以下文章:
http://www.troyhunt.com/2013/05/clickjack-attack-hidden-threat-right-in.html
https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options
欢迎访问 玄魂的博客
“Clickjacking(点击劫持)是由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼在2008年提出的。
是一种视觉欺骗手段,在web端就是iframe嵌套一个透明不可见的页面,让用户在不知情的情况下,点击攻击者想要欺骗用户点击的位置。”
假设你访问一个web站点并看到如下的页面:
免费的午餐谁都喜欢,当你满怀期待的点击按钮“WIN”的时候,恭喜你,你已经被点击劫持了。你实际点击的链接如下:
这是登录网上银行之后的一个转账链接,转移你的全部资产给Kim Dotcom先生。但是你根本你没有看到这个页面,像做梦一样。这只是一个简单的示例,实现上在网上银行转账不会这么简单,但是却告诉我们一个道理,访问网页和看魔术表演一样,看到的不一定都是真的。
下面我们具体讨论下点击劫持的内部机制,和防御措施。
1.1点击劫持(clickjacking attacks)
点击劫持的表象一般是用户点击了页面的A元素,但是实际上接收点击事件的却是另外一个元素。
现在改变下页面内个元素的透明度,再来看下刚才的页面。
我们可以看到,在ipad页面是上部还有个层,实际上是一个iframe,现在的透明度为50%,实际的页面中它的透明度为0%,虽然被隐藏不可见,但是随时都可以被激活。
在 Firefox的3D视图下,观察这个页面更明显。
被隐藏的iframe在IPAD页面的上部,同时转款的链接正好在“WIN”的上方,因为设置了透明度,用户只能看到“WIN”,但实际点击的是转款。
攻击者的页面内容可能是这样的:
<div style="position: absolute; left: 10px; top: 10px;">Hey - we're giving away iPad minis!!! Just click the WIN button and it's yours!!!</div>
<div style="position: absolute; left: 200px; top: 50px;">
<img src="http://images.apple.com/my/ipad-mini/overview/images/hero.jpg" width="250">
</div>
<div style="position: absolute; left: 10px; top: 101px; color: red; font-weight: bold;">>> WIN <<</div>
;" height="545" width="680" scrolling="no" src="http://mybank/Transfer.aspx"></iframe>
代码就是这么简单,下面我们观察一下点击“WIN”时实际上点击“转款”链接时的http请求信息。
从图中标记的地方,可以看到请求的实际地址和身份验证的cookie信息。当然这样的攻击能成功,在于用户已经登录的网上银行。这样的攻击行为和跨站请求伪造很类似。
下面我们讨论下针对点击劫持的基本防御方法。
1.2 Frame
Bursters
这是在页面上通过脚本来防止点击劫持或者iframe恶意请求的方式,本文不做介绍,详见http://seclab.stanford.edu/websec/framebusting/framebust.pdf,乌云有篇类似的中文文章共参考http://drops.wooyun.org/papers/104。
1.3 The
X-Frame-Options
X-Frame-Options
HTTP 响应头,可以指示浏览器是否应该加载一个iframe中的页面。网站可以通过设置X-Frame-Options阻止站点内的页面被其他页面嵌入从而防止点击劫持。
1.3.1 X-Frame-Options
X-Frame-Options共有三个值:
DENY
任何页面都不能被嵌入到iframe或者frame中。
SAMEORIGIN
页面只能被本站页面嵌入到iframe或者frame中。
ALLOW-FROM uri
页面自能被指定的Uri嵌入到iframe或frame中。
1.3.2 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"
1.3.3 Nginx 配置X-Frame-Options
到 nginx/conf文件夹下,修改nginx.conf ,添加如下内容:
add_header X-Frame-Options "SAMEORIGIN";
重启Nginx服务。
1.3.4 IIS配置X-Frame-Options
在web站点的web.config中配置:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add
name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
1.4 浏览器兼容性
桌面浏览器:
Web应用安全之点击劫持(CLICKJACKING)与X-FRAME-OPTIONS HEADER的更多相关文章
- 点击劫持ClickJacking
原文:https://beenle-xiaojie.github.io/2019/01/07/ClickJacking/ 引言 当我们的页面嵌入到一个iframe中时,安全测试提出一个于我而言很新鲜的 ...
- web安全:防范点击劫持的两种方式
防范点击劫持的两种方式 什么点击劫持?最常见的是恶意网站使用 <iframe> 标签把我方的一些含有重要信息类如交易的网页嵌入进去,然后把 iframe 设置透明,用定位的手段的把一些引诱 ...
- Nginx配置各种响应头防止XSS,点击劫持,frame恶意攻击
为什么要配置HTTP响应头? 不知道各位有没有被各类XSS攻击.点击劫持 (ClickJacking. frame 恶意引用等等方式骚扰过,百度联盟被封就有这些攻击的功劳在里面.为此一直都在搜寻相关防 ...
- Web安全之点击劫持(ClickJacking)
点击劫持(ClickJacking)是一种视觉上的欺骗手段.大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明的 ...
- 点击劫持(CLICKJACKING)与X-FRAME-OPTIONS HEADER
转载: http://www.tuicool.com/articles/mqUBfa 目录 前言 1.1 点击劫持(clickjacking attacks) 1.2 Frame Bursters. ...
- 基于iframe的CFS(Cross Frame Script)和Clickjacking(点击劫持)攻击
攻击原理: CFS攻击(Cross Frame Script(跨框架脚本)攻击)是利用浏览器允许框架(frame)跨站包含其它页面的漏洞,在主框架的代码 中加入scirpt,监视.盗取用户输入 ...
- ClickJacking(点击劫持)
问题: 点击劫持(ClickJacking)是一种视觉上的欺骗手段.大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点 ...
- 点击劫持漏洞解决( Clickjacking: X-Frame-Options header missing)
点击劫持漏洞 X-Frame-Options HTTP 响应头, 可以指示浏览器是否应该加载一个 iframe 中的页面. 网站可以通过设置 X-Frame-Options 阻止站点内的页面被其他页面 ...
- Web 漏洞分析与防御之点击劫持(三)
原文地址:Web 漏洞分析与防御之点击劫持(三) 博客地址:http://www.extlight.com 一.全称 点击劫持,顾名思义,用户点击某个按钮,却触发了不是用户真正意愿的事件. 二.原理 ...
随机推荐
- 移动端300ms延迟由来及解决方案
1.300ms延迟由来 300 毫秒延迟的主要原因是解决双击缩放(double tap to zoom).双击缩放,顾名思义,即用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页 ...
- STL基础3:map
#include <iostream> #include <map> #include <string> using namespace std; #define ...
- 设置frameset高度
设置frameset的高度 设置frameset高度 目前做了一个项目,界面如下: 这是使用frameset做的,在宽屏下开发一直没有发现什么问题,直到一个用户使用800*600的机子测试的时候, ...
- GC收集器种类
转载:https://wangkang007.gitbooks.io/jvm/content/la_ji_shou_ji_qi.html 收集器 1.1 Serial(串行)收集器 Serial收集器 ...
- ListView动态改变每一项的高度。
ListView中每一项的高度默认是相同的,除非超过其预定高度值,否则需要动点手脚. VariableSizedListView 继承 ListView然后重写protected override v ...
- Django之admin管理数据库,cookie验证及分页设置
一.admin管理数据库 1)models.py创建class类表 class Book(models.Model): name=models.CharField(max_length=) price ...
- ios 基础知识篇 堆和栈的区别
前言 堆和栈是什么?有什么区别?是干嘛的? 内存管理 移动设备的内存及其有限,每一个APP所能占用的内存是有限制的 (吐槽一下:iPhone6s还是16G起步,还好我也买不起->_-> 扯 ...
- 2018.10.24 NOIP模拟 小 C 的序列(链表+数论)
传送门 考虑到a[l],gcd(a[l],a[l+1]),gcd(a[l],a[l+1],a[l+2])....gcd(a[l]...a[r])a[l],gcd(a[l],a[l+1]),gcd(a[ ...
- Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
https://codeforces.com/contest/1131/problem/D 题意 给你一个n*m二维偏序表,代表x[i]和y[j]的大小关系,根据表构造大小分别为n,m的x[],y[] ...
- denyhost安装脚本
#!/bin/bashDENYHOSTS=DenyHosts-2.6.tar.gzDENYHOSTS_VERSION=DenyHosts-2.6DENYHOSTS_URL=http://192.168 ...