《白帽子讲 Web 安全:点击劫持》

目录

摘要:

一、点击劫持概述

二、点击劫持的实现示例:诱导用户收藏指定淘宝商品

案例

构建恶意页面:

设置绝对定位和z - index:

 控制透明度:

三、其他相关攻击技术

3.1图片覆盖攻击与 XSIO

3.2拖拽劫持与数据窃取

3.3Flash 劫持技术

3.4Filejacking 劫持攻击

四、浏览器的防御机制

4.1.原生防御策略

4.2.多维度防御体系

4.2.1.客户端防御 Frame Busting

Frame Busting 原理和绕过

绕过方式:

4.2.2.服务端头信息防御

(1)X - Frame - Options

(2)CSP:frame - ancestors 指令

(3)Cookie 的 samesite 属性

4.3.3. 复合防御策略

总结


摘要:

在 Web 安全的领域中,点击劫持(Clickjacking)是一种通过视觉欺骗诱导用户点击隐藏元素的攻击方式,是一种常见且具有潜在危害的攻击手段。吴翰清和叶敏所著的《白帽子讲 Web 安全》一书中对点击劫持进行了全面而深入的讲解,下面就来详细总结这部分内容。


一、点击劫持概述

点击劫持,英文名为 Clickjacking,也被称为 UI - 覆盖攻击。

它首次出现在 2008 年,由互联网安全专家罗伯特・汉森和耶利米・格劳斯曼首创。点击劫持(Clickjacking)是一种视觉上的欺骗手段,攻击者通过透明的 iframe 或其他隐藏元素通过覆盖不可见的框架来诱使用户在不知情的情况下执行某些操作。表面上受害者点击的是他们所看到的网页,但实际上点击的是被黑客精心构建的另一个置于原网页上面的透明页面。

例如:用户可能在浏览一个看似正常的网页并点击某个按钮时,却在不知情的情况下触发了另一个页面上的恶意操作,如转账、下载恶意软件等。


二、点击劫持的实现示例:诱导用户收藏指定淘宝商品

书中以诱导用户收藏指定淘宝商品为例,详细讲解了点击劫持的实现过程。攻击者创建一个页面,在其中使用 iframe 嵌入目标淘宝商品页面。为了实现劫持效果,需要注意以下几点:

  • 绝对定位:使用绝对定位来控制 iframe 的位置,确保其能够精确覆盖在用户正常浏览的页面之上。
  • z - index 属性:将 z - index 设置得足够大,使劫持页面的 iframe 处于所有页面的最上层,这样用户的点击操作会首先作用在 iframe 上。
  • 透明度控制:通过 opacity 属性控制页面的透明度,使 iframe 变得透明或半透明,让用户无法察觉其存在,从而在不知不觉中执行收藏商品等操作。

案例

假设攻击者想要诱导用户收藏指定的淘宝商品,他们可以通过以下步骤来实现点击劫持:

构建恶意页面

攻击者创建一个网页,在这个网页中使用<iframe>标签将淘宝商品页面嵌入其中。例如:

<iframe src="https://detail.tmall.com/item.htm?id=123456"></iframe>

这里的src属性指向要劫持的淘宝商品页面链接。

设置绝对定位和z - index

为了使嵌入的<iframe>能够覆盖在当前页面的上方,需要对其进行绝对定位,并设置足够大的z - index值。例如:

iframe {position: absolute;top: 0;left: 0;width: 100%;height: 100%;z - index: 9999;}
  • 通过position: absolute将<iframe>脱离文档流,使其可以自由定位在页面的任何位置;
  • top: 0和left: 0
  • 将其定位在页面的左上角;width: 100%和height: 100%使其覆盖整个页面;
  • z - index: 9999确保它位于所有页面元素的最上层。

 控制透明度

为了让用户难以察觉<iframe>的存在,需要将其透明度设置为合适的值。

例如:

iframe {opacity: 0.5;}

这里将透明度设置为 0.5,使<iframe>呈现半透明状态,既不会完全看不见,又不会过于明显,从而增加用户误点击的可能性。用户在浏览恶意页面时,以为点击的是当前页面的内容,实际上点击的是被<iframe>覆盖的淘宝商品页面上的收藏按钮,进而在不知情的情况下完成了商品收藏操作。


三、其他相关攻击技术

3.1图片覆盖攻击与 XSIO

攻击者利用图片的style属性或者 CSS 控制,将恶意链接或按钮等元素通过图片覆盖在正常页面之上,诱使用户点击图片时执行恶意操作。当用户点击图片时,实际上触发的是被覆盖的恶意元素的操作。XSIO(Cross - Site Iframe Observing)则是通过观察 iframe 中的内容变化来获取敏感信息,攻击者可以利用这些技术进一步实施攻击。

例如:攻击者可以将一张看似普通的图片放置在网页上,通过 CSS 将其定位在某个重要按钮的位置,并且设置图片的pointer - events属性为none(使图片不响应鼠标事件,从而让用户的点击能够穿透图片到达下方的恶意元素),这样用户点击图片区域时,就会触发下方隐藏的恶意操作。


3.2拖拽劫持与数据窃取

浏览器中的拖拽对象可以是链接、文字等,并且拖拽不受同源策略限制。攻击者利用这一特性,诱使用户从隐藏不可见的<iframe>中拖拽出攻击者希望得到的数据,然后放到攻击者能控制的另外一个页面,从而窃取数据。在 JavaScript 的支持下,这个攻击过程会变得非常隐蔽。

例如,攻击者可以在一个看似正常的网页中隐藏一个<iframe>,在<iframe>中放置一些敏感数据的链接或元素,然后通过一些诱导信息,让用户误以为是在进行正常的网页操作,将这些数据从<iframe>中拖拽到攻击者指定的区域,从而实现数据窃取。

攻击者可以通过监听用户的拖拽事件,劫持用户的拖拽操作,将用户的敏感数据(如文本、文件等)拖到指定的区域,从而实现数据窃取。这种攻击方式利用了用户在网页上的正常操作行为,具有较高的隐蔽性。

3.3Flash 劫持技术

曾经兴起过利用 Adobe Flash 程序漏洞的点击劫持攻击,通过嵌入恶意的 Flash 文件来实现点击劫持等攻击。

例如:制作一个 Flash 游戏,诱导用户点击 “CLICK” 按钮,每次点击后按钮位置发生变化,通过一步步操作,最终控制用户的摄像头等设备。但随着技术的发展和安全意识的提高,以及浏览器对 Flash 的支持逐渐减少,这种攻击方式已逐渐被淘汰。


3.4Filejacking 劫持攻击

Filejacking 是一种通过劫持用户的文件选择操作来窃取本机文件的攻击方式。攻击者利用 HTML5 的文件 API 和表单元素,诱使用户点击看似普通的按钮或链接选择本地文件,然后将文件内容发送到攻击者的服务器,从而窃取用户本机文件。

实现原理:通过巧妙地利用 HTML 的<input type="file">元素,结合 JavaScript 的事件处理,在用户不知情的情况下,让用户选择并上传本地文件,通过隐藏的表单元素和 JavaScript 代码来获取文件信息。

例如,攻击者可以将<input type="file">元素设置为透明且覆盖在一个正常按钮的位置,当用户点击正常按钮时,实际上触发了文件上传操作,攻击者就可以获取用户选择的文件内容。


四、浏览器的防御机制

4.1.原生防御策略

  • 跨域限制:同源策略限制跨域iframe操作

  • 拖拽安全:现代浏览器禁止跨域获取拖拽数据

  • 文件访问限制:禁止通过JS读取完整文件路径

4.2.多维度防御体系

4.2.1.客户端防御 Frame Busting

javascriptif (top != self) {top.location = self.location; // 强制跳出iframe
}
Frame Busting 原理和绕过

Frame Busting 是一种常见的防御点击劫持的技术,其原理是在页面中添加 JavaScript 代码,检测页面是否被嵌套在 iframe 中,如果是则采取相应的措施,如跳出 iframe 或阻止页面加载。然而,攻击者可以通过一些技术手段绕过 Frame Busting,如利用浏览器的漏洞或采用新的攻击方式。

绕过方式
  • 使用XSS Filter绕过(IE)

  • 通过security=restricted属性禁用JS

  • 使用多层iframe嵌套

4.2.2.服务端头信息防御

防御方式            实现代码                    特点                        
X-Frame-Options    X-Frame-Options: DENY      兼容性最佳(IE8+)          
CSP frame-ancestorsContent-Security-Policy: frame-ancestors 'none'更细粒度的域名控制(现代浏览器)
SameSite Cookie    Set-Cookie: key=val; SameSite=Lax阻止跨域携带认证信息        
(1)X - Frame - Options

作用:这是微软提出的一个 HTTP 头,专门用来防御利用<iframe>嵌套的点击劫持攻击,并且在 IE8、Firefox3.6、Chrome4 以上的版本均能很好地支持。

属性值

DENY:拒绝任何域加载当前页面的<iframe>。

例如,如果一个网站的服务器配置中设置了X - Frame - Options: DENY,那么无论在任何其他网站中尝试使用<iframe>嵌入该网站页面,浏览器都会拒绝加载,从而有效防止点击劫持攻击。

SAMEORIGIN:允许同源域下加载当前页面的<iframe>。即只有当<iframe>的src属性指向与当前页面同源(协议、域名、端口都相同)的页面时,浏览器才会允许加载。这样可以防止其他恶意网站通过<iframe>嵌入本网站页面进行点击劫持,但本网站内的合法页面之间可以通过<iframe>正常嵌套。

ALLOW - FROM uri:可以定义允许<iframe>加载的页面地址。

例如X - Frame - Options: ALLOW - FROM https://trusted - site.com,表示只允许https://trusted - site.com这个特定的网站通过<iframe>嵌入当前页面,其他网站的嵌入请求将被拒绝。


(2)CSP:frame - ancestors 指令

作用:Content - Security - Policy(CSP)中的frame - ancestors指令用于指定哪些页面可以作为当前页面的<iframe>祖先页面,即哪些页面可以通过<iframe>嵌入当前页面。

设置方式:例如,设置Content - Security - Policy: frame - ancestors'self',表示只允许同源的页面(即当前页面自身所在的源)通过<iframe>嵌入当前页面。如果设置为Content - Security - Policy: frame - ancestors'self' https://trusted - site.com,则表示允许同源页面以及https://trusted - site.com这个特定的可信网站通过<iframe>嵌入当前页面,其他网站的嵌入将被阻止。通过这种方式,可以精确控制页面的嵌入来源,有效防范点击劫持攻击。

Content Security Policy(CSP)是一种用于增强网页安全性的机制,CSP:frame - ancestors 指令可以指定允许嵌套当前页面的父页面的源。通过设置该指令,可以有效防止点击劫持攻击。


(3)Cookie 的 samesite 属性

作用:samesite属性用于控制 Cookie 在跨站请求时的发送行为,从而防范 CSRF(跨站请求伪造)攻击,同时对点击劫持也有一定的防御作用。

属性值

Strict:严格模式,表明这个 Cookie 在任何情况下都不可能作为第三方的 Cookie,有能力阻止所有 CSRF 攻击。此时,在 B 站点下发起对 A 站点的任何请求,A 站点的 Cookie 都不会包含在 Cookie 请求头中。这就意味着,攻击者通过点击劫持诱导用户在第三方页面上发起对目标网站的请求时,由于目标网站的 Cookie 不会被发送,攻击者无法利用用户已登录的身份进行恶意操作。

Lax:宽松模式,与 Strict 相比,放宽了限制,允许发送安全 HTTP 方法(如Get、OPTIONS、HEAD请求)带上 Cookie,但是不安全 HTTP 方法(如POST、PUT、DELETE请求)时,不能作为第三方链接的 Cookie。这种模式在一定程度上平衡了安全性和可用性,既可以防范大部分危险的跨站请求,又不会对一些正常的跨站链接访问造成太大影响。

Cookie 的 samesite 属性可以控制 Cookie 在跨站请求中的发送行为。通过设置 samesite 属性为“Strict”或“Lax”,可以限制 Cookie 在跨站请求中的使用,从而减少点击劫持等跨站攻击的风险。


4.3.3. 复合防御策略

推荐组合使用:

X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Set-Cookie: SESSIONID=xxx; SameSite=Lax; Secure

总结

点击劫持是一种具有较高风险的 Web 安全威胁,了解其实现原理和防御方法对于保障 Web 应用的安全至关重要。《白帽子讲 Web 安全》一书为我们提供了全面而深入的知识,帮助我们更好地应对这些安全挑战。点击劫持作为一种隐蔽且危险的 Web 安全威胁,需要我们在开发和使用 Web 应用时保持高度警惕。通过了解其原理、实现方式和防御方法,我们可以采取有效的措施来保护用户的安全和隐私,确保 Web 应用的安全性和可靠性。

喜欢的点点赞和关注,持续分享 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于机器学习的图像分类综述

图像分类是计算机视觉和模式识别领域的核心任务之一,其目标是从输入的图像中自动识别并标注其所属的类别标签。基于机器学习的图像分类技术近年来取得了显著进展,尤其是在深度学习的推动下,性能得到了质的提升,并在多个实际应用中表现出色。 以下是对基于机器学习的图像分…

SQL Server 中行转列

在 SQL Server 数据库中&#xff0c;行转列在实践中是一种非常有用&#xff0c;可以将原本以行形式存储的数据转换为列的形式&#xff0c;以便更好地进行数据分析和报表展示。本文将深入浅出地介绍 SQL Server 中的行转列技术&#xff0c;并以数据表中的时间数据为例进行详细讲…

系统架构设计师—计算机基础篇—系统性能评价

文章目录 性能评价指标主频CPU时钟周期机器周期CPIMIPS 系统性能调整阿姆达尔解决方案性能优化数据库应用系统Web应用系统 性能评估方法评价程序真实程序基准测试程序核心程序小型基准程序合成基准程序 基准测试程序组 评测准确度 性能指标计算机数据库应用系统Web应用系统 性能…

web3.0简介

Web3.0&#xff08;或简称 Web3&#xff09;是近年来广泛讨论的一个新型互联网概念&#xff0c;其核心思想在于利用区块链及相关分布式技术&#xff0c;打造一个更加开放、去中心化、透明且以用户为主导的网络生态系统。这意味着在 Web3.0 时代&#xff0c;用户不再只是信息的消…

python第十一课:并发编程 | 多任务交响乐团

&#x1f3af; 本节目标 理解多线程/多进程/协程的应用场景掌握threading与multiprocessing核心用法学会使用asyncio进行异步编程开发实战项目&#xff1a;高并发爬虫引擎破解GIL锁的性能迷思 1️⃣ 并发编程三剑客 &#x1f3bb; 生活化比喻&#xff1a; 多线程 → 餐厅多个…

微服务架构实践:SpringCloud与Docker容器化部署

## 微服务架构实践&#xff1a;SpringCloud与Docker容器化部署 随着互联网应用的复杂性不断增加&#xff0c;传统的单体应用架构面临着诸多挑战&#xff0c;如难以部署、维护困难、开发效率低下等问题凸显出来。为了解决这些问题&#xff0c;微服务架构应运而生&#xff0c;它通…

SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD

目录 一、OFD 简介 1.1 什么是 OFD&#xff1f;1.2 什么是 版式文档&#xff1f;1.3 为什么要用 OFD 而不是PDF&#xff1f; 二、ofdrw 简介 2.1 定义2.2 Maven 依赖2.3 ofdrw 的 13 个模块 三、PDF/文本/图片 转 OFD&#xff08;ofdrw-conterver&#xff09; 3.1 介绍&#xf…

随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)

随着自动驾驶技术的蓬勃发展&#xff0c;安全、高效的路径规划成为核心挑战之一。快速探索随机树&#xff08;RRT&#xff09;算法作为一种强大的路径搜索策略&#xff0c;为自动驾驶汽车在复杂环境下绕过静态障碍物规划合理路径提供了有效解决方案。 RRT 算法基于随机采样思想…

Vscode通过Roo Cline接入Deepseek

文章目录 背景第一步、安装插件第二步、申请API key第三步、Vscode中配置第四步、Deepseek对话 背景 在前期介绍【IDEA通过Contince接入Deepseek】步骤和流程&#xff0c;那如何在vscode编译器中使用deepseek&#xff0c;记录下来&#xff0c;方便备查。 第一步、安装插件 在…

C++ 二叉树代码

二叉树代码&#xff0c;见下 #include <iostream> using namespace std;template<typename T> struct TreeNode{T val;TreeNode *left;TreeNode *right;TreeNode():val(0), left(NULL), right(NULL)TreeNode(T x):val(x), left(NULL), right(NULL){} };template&l…

leetcode第17题求电话号码组合

原题出于leetcode第17题https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/题目如下&#xff1a; 题目稍微有点复杂&#xff0c;初看会感觉特别复杂&#xff0c;首先我们需要理清思路&#xff1a; 最后的结果是字母组合&#xff0c;因此遍历的是…

Deepseek对ChatGPT的冲击?

从测试工程师的视角来看&#xff0c;DeepSeek对ChatGPT的冲击主要体现在**测试场景的垂直化需求与通用模型局限性之间的博弈**。以下从技术适配性、效率优化、风险控制及未来趋势四个维度展开分析&#xff1a; --- ### **一、技术适配性&#xff1a;垂直领域能力决定工具选择…

三十五周学习周报

目录 摘要abstract文献阅读1.1相关知识1.1.1 PSO1.1.2 BI-LSTM1.1.3 BI-GRU 1.2 整体框架1.3 实验分析 总结 摘要 在本周阅读的文献中&#xff0c;作者提出了一种创新的水文时间序列预测模型&#xff0c;其通过将粒子群优化&#xff08;PSO&#xff09;与Bi-LSTM和Bi-GRU相结合…

Git:多人协作

目录 多人协作一 准备工作 开发者1准备工作 开发者2准备工作 协作开发 将内容合并进master 多人协作二 开发者1进行工作 开发者2进行工作 特殊场景 将内容合并进master 之前所学习的Git操作&#xff0c;是为了多人协作开发做铺垫的&#xff0c;因为在公司中&#xf…

登录次数限制

文章目录 一、应用场景与设计目的1. 应用场景2. 设计目的 二、功能设计1. 登录限制规则2. 解锁机制3. 适用维度 三、技术实现1. 数据存储2. 逻辑流程3. 实现代码示例4. 动态锁定时间 四、安全增强与扩展1. 防止用户名枚举2. 加入验证码3. 监控与报警4. 分布式支持 五、设计思考…

计算机毕业设计SpringBoot+Vue.js景区民宿预约系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

(十 五)趣学设计模式 之 命令模式!

目录 一、 啥是命令模式&#xff1f;二、 为什么要用命令模式&#xff1f;三、 策略模式的实现方式四、 命令模式的优缺点五、 命令模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;可以多多支…

Matlab 大量接单

分享一个matlab接私活、兼职的平台 1、技术方向满足任一即可 2、技术要求 3、最后 技术方向满足即可 MATLAB&#xff1a;熟练掌握MATLAB编程语言&#xff0c;能够使用MATLAB进行数据处理、机器学习和深度学习等相关工作。 机器学习、深度学习、强化学习、仿真、复现、算法、…

【自学笔记】大数据基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 大数据基础知识点总览1. 大数据概述2. 大数据处理技术3. 数据仓库与数据挖掘4. 大数据分析与可视化5. 大数据平台与架构6. 大数据安全与隐私 总结 大数据基础知识点…

17、什么是智能指针,C++有哪几种智能指针【高频】

智能指针其实不是指针&#xff0c;而是一个&#xff08;模板&#xff09;类&#xff0c;用来存储指向某块资源的指针&#xff0c;并自动释放这块资源&#xff0c;从而解决内存泄漏问题。主要有以下四种&#xff1a; auto_ptr 它的思想就是当当一个指针对象赋值给另一个指针对…