当前位置: 首页 > article >正文

深入剖析 CSRF 漏洞:原理、危害案例与防护

目录

前言

漏洞介绍

漏洞原理

产生条件

产生的危害

靶场练习

post 请求csrf案例

防御措施

验证请求来源

设置 SameSite 属性

双重提交 Cookie

结语


前言

在网络安全领域,各类漏洞层出不穷,时刻威胁着用户的隐私与数据安全。跨站请求伪造(Cross - Site Request Forgery,简称 CSRF)漏洞便是其中较为隐蔽且危害较大的一种。它如同隐藏在暗处的 “小偷”,悄无声息地窃取用户权限,执行恶意操作。了解 CSRF 漏洞,无论是对 Web 开发者加固应用安全,还是对普通用户提升安全防范意识,都有着重要意义。

漏洞介绍

CSRF 漏洞,简单来说,是指攻击者诱导受害者进入一个恶意链接,利用受害者在已登录的目标网站上的身份验证信息,在受害者不知情的情况下,以受害者的名义在目标网站上执行非本意的操作。与跨站脚本(XSS)漏洞不同,CSRF 漏洞主要利用的是网站对用户浏览器的信任,而非直接攻击用户浏览器。这种漏洞广泛存在于各类 Web 应用中,只要应用依赖用户的身份验证来执行敏感操作,就有可能受到 CSRF 攻击的威胁。

漏洞原理

  1. 用户登录与身份验证:用户在目标网站进行登录,网站通过 Cookie 或 Token 等方式对用户进行身份验证,并在后续请求中识别用户身份。例如,用户登录银行网站后,银行网站会为用户生成一个包含身份信息的 Cookie,用户后续的转账、查询等操作,网站都会根据这个 Cookie 来确认用户身份。
  2. 攻击者构造恶意链接:攻击者精心构造一个包含恶意操作的链接,比如转账到攻击者账户的链接。这个链接的请求地址是目标网站的合法操作地址,但是参数被攻击者篡改,包含了恶意指令。
  3. 诱导受害者访问:攻击者通过各种手段,如发送恶意邮件、在社交平台发布诱人的消息等,诱导受害者点击这个恶意链接。当受害者点击链接时,由于受害者的浏览器中保存着目标网站的身份验证信息(如 Cookie),浏览器会自动带上这些信息向目标网站发送请求。
  4. 目标网站执行恶意操作:目标网站接收到请求后,根据附带的身份验证信息,认为请求来自合法用户,从而执行了链接中的恶意操作,如转账、修改密码等,而受害者对此毫不知情。

产生条件

  1. 目标网站存在敏感操作:网站提供了如转账、修改密码、删除重要数据等敏感操作,这些操作仅应在用户主动发起且确认的情况下执行。
  2. 身份验证信息存储方式不当:网站依赖 Cookie 或其他简单的身份验证机制,且这些验证信息在用户浏览器中存储,容易被攻击者利用。例如,Cookie 没有设置 HttpOnly 属性,使得攻击者可以通过 JavaScript 读取 Cookie 内容,进一步利用。
  3. 缺乏有效的防御机制:网站没有对请求来源进行严格验证,无法识别出请求是否来自合法用户的主动操作,还是被攻击者诱导的恶意请求。

产生的危害

  1. 经济损失:在金融类网站中,攻击者利用 CSRF 漏洞进行转账操作,直接导致用户的资金被盗取,给用户带来严重的经济损失。
  2. 隐私泄露:攻击者可以修改用户的个人信息,如在社交网站上修改用户的隐私设置,将原本私密的信息公开,造成用户隐私泄露。
  3. 账号被盗用:通过修改用户密码,攻击者可以轻松登录用户账号,进一步控制用户的账户,发布恶意信息,甚至利用用户的社交关系进行诈骗等活动。

靶场练习

  1. 搭建靶场环境:使用开源的 Web 安全靶场,在这里使用的是DVWA(Damn Vulnerable Web Application)。在虚拟机环境中部署 DVWA,设置好相关的数据库和配置文件。
  2. 选择 CSRF 漏洞模块:进入 DVWA 的 CSRF 漏洞测试模块,将安全级别设置为 “Low”,这个级别下的漏洞比较容易复现。
  3. 构造恶意链接:查看low模式下的源代码是否有进行过滤,可以查看没有进行过滤校验在该模块中,有一个修改用户密码的功能。攻击者可以通过抓包工具(如 Burp Suite)获取正常修改密码的请求包,然后修改其中的密码参数,构造出一个恶意链接。正常的修改密码请求是,攻击者将其修改为http://10.0.0.100:90/DVwa-master/vulnerabilities/csrf/?password_new=123456333&password_conf=123456333&Change=Change#。
  4. 诱导受害者访问:假设受害者已经登录了 DVWA 且浏览器中保存了登录的 Cookie。攻击者将构造好的恶意链接发送给受害者,当受害者点击链接时,浏览器会自动带上 Cookie 向 DVWA 发送请求,从而实现密码修改,完成 CSRF 攻击的复现。
  5. 防御措施验证:将 DVWA 的安全级别提升到 “Medium” 或 “High”,再次尝试上述攻击。在 “Medium” 级别,网站可能会增加一些简单的防御机制,如在请求中增加一个随机的 Token,验证 Token 的合法性。攻击者会发现攻击无法成功,从而理解防御 CSRF 漏洞的原理和方法。

post 请求csrf案例

  1. 登录凡诺后台修改密码:
    操作描述:攻击者首先正常登录凡诺后台系统,进入修改密码的功能页面。在这个页面中,攻击者会输入新密码并提交修改请求,这一步的目的是触发系统的修改密码操作,以便后续利用这个操作来构造 CSRF 攻击。在这里我修改的密码是1234567。
    重要性:通过这一步,攻击者可以熟悉修改密码的流程和页面布局,同时为后续抓包获取必要的请求信息做准备。
  2. 使用 Burp Suite 抓包

    抓包工具介绍:Burp Suite 是一款广泛使用的 Web 应用程序安全测试工具,它可以拦截、修改和分析 HTTP 请求和响应。攻击者利用 Burp Suite 的抓包功能,捕获在凡诺后台修改密码时浏览器发送的请求。
    请求类型与关键信息
    没有 Token 值:Token 是一种用于防止 CSRF 攻击的机制,通常是服务器生成的一个随机字符串,会在每次请求中附带。如果请求中没有 Token 值,说明该系统在修改密码这个功能上可能没有实现有效的 CSRF 防护,这为攻击者提供了可乘之机。
    POST 请求:抓包结果显示修改密码的请求是一个 POST 请求。POST 请求通常用于向服务器提交数据,在修改密码的场景中,新密码等重要信息会通过 POST 请求发送到服务器。
  3. 使用 Burp Suite 生成 POC(Proof of Concept,概念验证)

    POC 生成过程
    1. 通过分析生成的 POC 代码,可以看到请求的详细信息,包括请求的 URL、请求方法(POST)、请求参数(如用户名、新密码等)。
      在 Burp Suite 中,攻击者可以利用抓包得到的请求信息,使用其内置的功能生成一个 POC。这个 POC 本质上是一段可以模拟用户修改密码请求的代码,通常是一段 JavaScript 代码。

      将修改后的 JavaScript 代码复制到一个新的 HTML 文件中。HTML 文件可以在浏览器中打开,当浏览器加载这个 HTML 文件时,其中的 JavaScript 代码会自动执行,向凡诺后台服务器发送修改密码的请求。
    • 修改代码并创建 HTML 文件:这里将1234567的密码修改为12345678,将代码放在单独的文件中
    • 废弃 Burp Suite 数据包:在完成 HTML 文件的创建后,攻击者不再需要之前在 Burp Suite 中捕获的原始数据包,因此可以将其废弃。
  4. 诱导被攻击者打开 HTML 文件

    • 攻击原理:当被攻击者在已经登录凡诺后台的状态下打开攻击者构造的 HTML 文件时,浏览器会执行其中的 JavaScript 代码,向凡诺后台服务器发送修改密码的请求。由于被攻击者的浏览器中保存着登录凡诺后台的会话信息(如 Cookie),服务器会认为这个请求是由合法用户发起的,从而执行修改密码的操作。在这里我们在本机环境中进行演示。
    • 攻击成功标志:如果被攻击者成功打开了 HTML 文件,并且服务器接受了修改密码的请求,那么攻击就成功了。攻击者可以通过检查凡诺后台的密码是否被修改来确认攻击结果。
    • 此时输入1234567发现密码错误,已经更改为12345678

防御措施

  1. 验证请求来源

  • Referer 验证:服务器可以通过检查请求头中的 Referer 字段来判断请求的来源。如果 Referer 字段的值不符合预期,说明请求可能来自恶意网站,可以拒绝该请求。但需要注意的是,Referer 字段可以被篡改,因此这种方法并不是绝对安全的。
  • 同源策略:现代浏览器遵循同源策略,只有来自同一源(协议、域名和端口都相同)的页面才能直接访问另一个页面的资源。服务器可以利用这一特性,确保请求来自合法的源。
  1. 使用 CSRF Token
  • 生成 Token:服务器在用户访问包含敏感操作的页面时,生成一个随机且唯一的 CSRF Token,并将其存储在服务器端(如会话中),同时将 Token 嵌入到页面中(如隐藏表单字段或请求头)。
  • 验证 Token:当用户提交请求时,客户端需要将 Token 一并发送给服务器。服务器验证客户端提交的 Token 与服务器端存储的 Token 是否一致,如果一致则认为请求合法,否则拒绝请求。
  1. 设置 SameSite 属性

SameSite 是 Cookie 的一个属性,用于控制 Cookie 在跨站请求中的传递。可以将 Cookie 的 SameSite 属性设置为 “Strict” 或 “Lax”,以限制 Cookie 只在同源请求或同站请求中传递,从而减少 CSRF 攻击的风险。

双重提交 Cookie

服务器在用户访问页面时,生成一个随机的 Token 并将其存储在 Cookie 中,同时将该 Token 嵌入到页面的表单字段或请求头中。当用户提交请求时,服务器会比较 Cookie 中的 Token 和请求中携带的 Token 是否一致,如果一致则认为请求合法。

结语

CSRF 漏洞虽然隐蔽,但只要开发者和用户提高安全意识,采取有效的防范措施,就能大大降低其带来的风险。对于开发者来说,要在代码层面增加对请求来源的验证,使用 Token 等技术防止恶意请求。对于用户而言,要谨慎点击不明链接,尤其是在已登录重要网站的情况下。网络安全是一场持久战,需要我们不断学习和实践,共同守护网络空间的安全。

相关文章:

深入剖析 CSRF 漏洞:原理、危害案例与防护

目录 前言 漏洞介绍 漏洞原理 产生条件 产生的危害 靶场练习 post 请求csrf案例 防御措施 验证请求来源 设置 SameSite 属性 双重提交 Cookie 结语 前言 在网络安全领域,各类漏洞层出不穷,时刻威胁着用户的隐私与数据安全。跨站请求伪造&…...

rust跨平台调用动态库

动态库在不同的操作系统&#xff0c;扩展名是不一样的&#xff0c;所以要做处理: static LIB: Lazy<Mutex<Option<Library>>> Lazy::new(|| Mutex::new(None));type CreateFunc unsafe extern "C" fn(*const c_char, *const c_char) -> c_int…...

buuuctf_秘密文件

题目&#xff1a; 应该是分析流量包了&#xff0c;用wireshark打开 我追踪http流未果&#xff0c;分析下ftp流 追踪流看看 用户 “ctf” 使用密码 “ctf” 登录。 PORT命令用于为后续操作设置数据连接。 LIST命令用于列出 FTP 服务器上目录的内容&#xff0c;但在此日志中未…...

课程设计|结构力学

课 程 设 计 第一部分 &#xff08;结构力学&#xff09; 2、两种结构在静力等效荷载作用下&#xff0c;内力有哪些不同&#xff1f;&#xff08;分析比较&#xff09; 1/2 1 1 1 1 1 1/2 1/4 11(1/2) 1/4 图1求解过程及结果&#xff1a; 轴力图&#xff1a; 内力计算 单位&…...

三次方根pow

给定一个浮点数n&#xff0c;求它的三次方根。 输入格式: 共一行&#xff0c;包含一个浮点数n,−10000≤n≤10000。 输出格式: 共一行&#xff0c;包含一个浮点数&#xff0c;表示问题的解。 注意&#xff0c;结果保留6位小数。 输入样例: 1000.00输出样例: 10.000000 …...

跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)

Movie Gen&#xff1a;A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型&#xff0c;包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…...

【项目集成Husky】

项目集成Husky 安装初始化 Husky在.husky → pre-commit文件中添加想要执行的命令 安装 使用 Husky 可以帮助你在 Git 钩子中运行脚本&#xff0c;例如在提交代码前运行测试或格式化代码pnpm add --save-dev husky初始化 Husky npx husky init这会在项目根目录下创建一个 .hu…...

keil5如何添加.h 和.c文件,以及如何添加文件夹

1.简介 在hal库的编程中我们一般会生成如下的几个文件夹&#xff0c;在这几个文件夹内存储着各种外设所需要的函数接口.h文件&#xff0c;和实现函数具体功能的.c文件&#xff0c;但是有时我们想要创建自己的文件夹并在这些文件夹下面创造.h .c文件来实现某些功能&#xff0c;…...

2025-1-28-sklearn学习(47) (48) 万家灯火亮年至,一声烟花开新来。

文章目录 sklearn学习(47) & (48)sklearn学习(47) 把它们放在一起47.1 模型管道化47.2 用特征面进行人脸识别47.3 开放性问题: 股票市场结构 sklearn学习(48) 寻求帮助48.1 项目邮件列表48.2 机器学习从业者的 Q&A 社区 sklearn学习(47) & (48) 文章参考网站&…...

Flask数据的增删改查(CRUD)_flask删除数据自动更新

查询年龄小于17的学生信息 Student.query.filter(Student.s_age < 17) students Student.query.filter(Student.s_age.__lt__(17))模糊查询&#xff0c;使用like&#xff0c;查询姓名中第二位为花的学生信息 like ‘_花%’,_代表必须有一个数据&#xff0c;%任何数据 st…...

算法随笔_33: 132模式

上一篇:算法随笔_32: 移掉k位数字-CSDN博客 题目描述如下: 给你一个整数数组 nums &#xff0c;数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成&#xff0c;并同时满足&#xff1a;i < j < k 和 nums[i] < nums[k] < nums[j…...

Linux内核中的页面错误处理机制与按需分页技术

在现代操作系统中,内存管理是核心功能之一,而页面错误(Page Fault)处理机制是内存管理的重要组成部分。当程序访问一个尚未映射到物理内存的虚拟地址时,CPU会触发页面错误异常,内核需要捕获并处理这种异常,以决定如何响应,例如加载缺失的页面、处理权限错误等。Linux内…...

【Git】使用笔记总结

目录 概述安装Git注册GitHub配置Git常用命令常见场景1. 修改文件2. 版本回退3. 分支管理 常见问题1. git add [中文文件夹] 无法显示中文问题2. git add [文件夹] 文件名中含有空格3. git add 触发 LF 回车换行警告4. git push 提示不存在 Origin 仓库5. Git与GitHub中默认分支…...

C语言中的存储类

C语言中的存储类 在C语言中&#xff0c;存储类是用于定义变量和函数的作用域、生命周期以及可见性的关键字。存储类决定了数据在内存中的存储位置以及它们在程序中的使用方式。本文将详细介绍C语言中的存储类&#xff0c;包括其类型、作用以及如何使用。 1. 存储类的类型 C语…...

DeepSeek 云端部署,释放无限 AI 潜力!

1.简介 目前&#xff0c;OpenAI、Anthropic、Google 等公司的大型语言模型&#xff08;LLM&#xff09;已广泛应用于商业和私人领域。自 ChatGPT 推出以来&#xff0c;与 AI 的对话变得司空见惯&#xff0c;对我而言没有 LLM 几乎无法工作。 国产模型「DeepSeek-R1」的性能与…...

【Qt5】声明之后快速跳转

我在网上看到的方法是ctrlL&#xff08;&#xff1f;不是很清楚&#xff0c;因为我跳转不成功&#xff01;&#xff09; 另外一种就是鼠标点击跳转的。 首先&#xff0c;声明私有成员函数 此时&#xff0c;一般步骤应该是在构造函数里面继续&#xff0c;写函数的框架什么的。于…...

flowable expression和json字符串中的双引号内容

前言 最近做项目&#xff0c;发现了一批特殊的数据&#xff0c;即特殊字符"&#xff0c;本身输入双引号也不是什么特殊的字符&#xff0c;毕竟在存储时就是正常字符&#xff0c;只不过在编码的时候需要转义&#xff0c;转义符是\&#xff0c;然而转义符\也是特殊字符&…...

新一代搜索引擎,是 ES 的15倍?

Manticore Search介绍 Manticore Search 是一个使用 C 开发的高性能搜索引擎&#xff0c;创建于 2017 年&#xff0c;其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx&#xff0c;显着改进了它的功能&#xff0c;修复了数百个错误&#xff0c;几乎完全重写了代码…...

Pandas基础06(异常值的检测与过滤/抽样/常用聚合函数/数据聚合)

Pandas基础06 异常值的检测与过滤 在数据分析中&#xff0c;异常值&#xff08;Outliers&#xff09;是指与其他数据点显著不同的值。这些值可能由于数据录入错误、设备故障或极端情况而产生&#xff0c;因此在进行数据分析之前&#xff0c;需要对其进行检测与过滤。本文将介绍…...

事务01之事务机制

事务机制 文章目录 事务机制一&#xff1a;ACID1&#xff1a;什么是ACID2&#xff1a;MySQL是如何实现ACID的 二&#xff1a;MySQL事务机制综述1&#xff1a;手动管理事务2&#xff1a;事务回滚点3&#xff1a;事务问题和隔离机制&#xff08;面试&#xff09;3.1&#xff1a;事…...

Python-基于mediapipe,pyautogui,cv2和numpy的电脑手势截屏工具(进阶版)

前言:在我们的日常生活中,手机已经成为我们每天工作,学习,生活的一个不可或缺的部分。众所周知:为了我们的使用方便,手机里面的很多功能非常人性化,既便捷又高效,其中就有手机的截屏方式,它们花样繁多,如三指截屏,手势截屏等。那么怎么在电脑里面也实现这个功能呢?…...

@EventListener底层原理(超详细)| @TransactionalEventListener底层原理 | 事务同步

0. 举个栗子0.1. 事件监听方法0.2. 事件推送 1. EventListener注解2. EventListener标注的监听方法解析2.1. 事件监听方法处理器EventListenerMethodProcessors2.1.1. AbstractApplicationContext.invokeBeanFactoryPostProcessors2.1.2. AbstractApplicationContext.initAppli…...

NX/UG二次开发—CAM—快速查找程序参数名称

使用UF_PARAM_XXX读取或设置参数时,会发现程序中有一个INT类型参数param_index,这个就是对应程序中的参数,比如读取程序余量,则param_index = UF_PARAM_STOCK_PART,读取程序的加工坐标系则param_index = UF_PARAM_MCS等等。 你需要读取什么参数,只要只能在uf_param_indic…...

X86路由搭配rtl8367s交换机

x86软路由&#xff0c;买双网口就好。或者单网口主板&#xff0c;外加一个pcie千兆。 华硕h81主板戴尔i350-T2双千兆&#xff0c;做bridge下载&#xff0c;速度忽高忽低。 今天交换机到货&#xff0c;poe供电&#xff0c;还是网管&#xff0c;支持Qvlan及IGMP Snooping&#xf…...

【C++语言】卡码网语言基础课系列----5. A+B问题VIII

文章目录 练习题目AB问题VIII具体代码实现 小白寄语诗词共勉 练习题目 AB问题VIII 题目描述&#xff1a; 你的任务是计算若干整数的和。 输入描述&#xff1a; 输入的第一行为一个整数N&#xff0c;接下来N行每行先输入一个整数M&#xff0c;然后在同一行内输入M个整数。 输出…...

【LLM-agent】(task1)简单客服和阅卷智能体

note 一个完整的agent有模型 (Model)、工具 (Tools)、编排层 (Orchestration Layer)一个好的结构化 Prompt 模板&#xff0c;某种意义上是构建了一个好的全局思维链。 如 LangGPT 中展示的模板设计时就考虑了如下思维链&#xff1a;Role (角色) -> Profile&#xff08;角色…...

CAP 定理的 P 是什么

分布式系统 CAP 定理 P 代表什么含义 作者之前在看 CAP 定理时抱有很大的疑惑&#xff0c;CAP 定理的定义是指在分布式系统中三者只能满足其二&#xff0c;也就是存在分布式 CA 系统的。作者在网络上查阅了很多关于 CAP 文章&#xff0c;虽然这些文章对于 P 的解释五花八门&am…...

RK3568使用opencv(使用摄像头捕获图像数据显示)

文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结二、代码实现一、opencv相关的类 1. cv::VideoCapture cv::VideoCapture 是 OpenCV 中用于视频捕捉的类,常用于从摄像头、视频文件、或者图像序列中捕…...

ZZNUOJ(C/C++)基础练习1021——1030(详解版)

目录 1021 : 三数求大值 C语言版 C版 代码逻辑解释 1022 : 三整数排序 C语言版 C版 代码逻辑解释 补充 &#xff08;C语言版&#xff0c;三目运算&#xff09;C类似 代码逻辑解释 1023 : 大小写转换 C语言版 C版 1024 : 计算字母序号 C语言版 C版 代码逻辑总结…...

2025 年,链上固定收益领域迈向新时代

“基于期限的债券市场崛起与 Secured Finance 的坚定承诺” 2025年&#xff0c;传统资产——尤其是股票和债券——大规模涌入区块链的浪潮将创造历史。BlackRock 首席执行官 Larry Fink 近期在彭博直播中表示&#xff0c;代币化股票和债券将逐步融入链上生态&#xff0c;将进一…...