深入剖析 CSRF 漏洞:原理、危害案例与防护
目录
前言
漏洞介绍
漏洞原理
产生条件
产生的危害
靶场练习
post 请求csrf案例
防御措施
验证请求来源
设置 SameSite 属性
双重提交 Cookie
结语
前言
在网络安全领域,各类漏洞层出不穷,时刻威胁着用户的隐私与数据安全。跨站请求伪造(Cross - Site Request Forgery,简称 CSRF)漏洞便是其中较为隐蔽且危害较大的一种。它如同隐藏在暗处的 “小偷”,悄无声息地窃取用户权限,执行恶意操作。了解 CSRF 漏洞,无论是对 Web 开发者加固应用安全,还是对普通用户提升安全防范意识,都有着重要意义。
漏洞介绍
CSRF 漏洞,简单来说,是指攻击者诱导受害者进入一个恶意链接,利用受害者在已登录的目标网站上的身份验证信息,在受害者不知情的情况下,以受害者的名义在目标网站上执行非本意的操作。与跨站脚本(XSS)漏洞不同,CSRF 漏洞主要利用的是网站对用户浏览器的信任,而非直接攻击用户浏览器。这种漏洞广泛存在于各类 Web 应用中,只要应用依赖用户的身份验证来执行敏感操作,就有可能受到 CSRF 攻击的威胁。
漏洞原理
- 用户登录与身份验证:用户在目标网站进行登录,网站通过 Cookie 或 Token 等方式对用户进行身份验证,并在后续请求中识别用户身份。例如,用户登录银行网站后,银行网站会为用户生成一个包含身份信息的 Cookie,用户后续的转账、查询等操作,网站都会根据这个 Cookie 来确认用户身份。
- 攻击者构造恶意链接:攻击者精心构造一个包含恶意操作的链接,比如转账到攻击者账户的链接。这个链接的请求地址是目标网站的合法操作地址,但是参数被攻击者篡改,包含了恶意指令。
- 诱导受害者访问:攻击者通过各种手段,如发送恶意邮件、在社交平台发布诱人的消息等,诱导受害者点击这个恶意链接。当受害者点击链接时,由于受害者的浏览器中保存着目标网站的身份验证信息(如 Cookie),浏览器会自动带上这些信息向目标网站发送请求。
- 目标网站执行恶意操作:目标网站接收到请求后,根据附带的身份验证信息,认为请求来自合法用户,从而执行了链接中的恶意操作,如转账、修改密码等,而受害者对此毫不知情。
产生条件
- 目标网站存在敏感操作:网站提供了如转账、修改密码、删除重要数据等敏感操作,这些操作仅应在用户主动发起且确认的情况下执行。
- 身份验证信息存储方式不当:网站依赖 Cookie 或其他简单的身份验证机制,且这些验证信息在用户浏览器中存储,容易被攻击者利用。例如,Cookie 没有设置 HttpOnly 属性,使得攻击者可以通过 JavaScript 读取 Cookie 内容,进一步利用。
- 缺乏有效的防御机制:网站没有对请求来源进行严格验证,无法识别出请求是否来自合法用户的主动操作,还是被攻击者诱导的恶意请求。
产生的危害
- 经济损失:在金融类网站中,攻击者利用 CSRF 漏洞进行转账操作,直接导致用户的资金被盗取,给用户带来严重的经济损失。
- 隐私泄露:攻击者可以修改用户的个人信息,如在社交网站上修改用户的隐私设置,将原本私密的信息公开,造成用户隐私泄露。
- 账号被盗用:通过修改用户密码,攻击者可以轻松登录用户账号,进一步控制用户的账户,发布恶意信息,甚至利用用户的社交关系进行诈骗等活动。
靶场练习
- 搭建靶场环境:使用开源的 Web 安全靶场,在这里使用的是DVWA(Damn Vulnerable Web Application)。在虚拟机环境中部署 DVWA,设置好相关的数据库和配置文件。
- 选择 CSRF 漏洞模块:进入 DVWA 的 CSRF 漏洞测试模块,将安全级别设置为 “Low”,这个级别下的漏洞比较容易复现。

- 构造恶意链接:查看low模式下的源代码是否有进行过滤,可以查看没有进行过滤校验
在该模块中,有一个修改用户密码的功能。攻击者可以通过抓包工具(如 Burp Suite)获取正常修改密码的请求包,然后修改其中的密码参数,构造出一个恶意链接。正常的修改密码请求是
,攻击者将其修改为http://10.0.0.100:90/DVwa-master/vulnerabilities/csrf/?password_new=123456333&password_conf=123456333&Change=Change#。
- 诱导受害者访问:假设受害者已经登录了 DVWA 且浏览器中保存了登录的 Cookie。攻击者将构造好的恶意链接发送给受害者,当受害者点击链接时,浏览器会自动带上 Cookie 向 DVWA 发送请求,从而实现密码修改,完成 CSRF 攻击的复现。
- 防御措施验证:将 DVWA 的安全级别提升到 “Medium” 或 “High”,再次尝试上述攻击。在 “Medium” 级别,网站可能会增加一些简单的防御机制,如在请求中增加一个随机的 Token,验证 Token 的合法性。攻击者会发现攻击无法成功,从而理解防御 CSRF 漏洞的原理和方法。
post 请求csrf案例
- 登录凡诺后台修改密码:
操作描述:攻击者首先正常登录凡诺后台系统,进入修改密码的功能页面。在这个页面中,攻击者会输入新密码并提交修改请求,这一步的目的是触发系统的修改密码操作,以便后续利用这个操作来构造 CSRF 攻击。在这里我修改的密码是1234567。
重要性:通过这一步,攻击者可以熟悉修改密码的流程和页面布局,同时为后续抓包获取必要的请求信息做准备。 -
使用 Burp Suite 抓包
抓包工具介绍:Burp Suite 是一款广泛使用的 Web 应用程序安全测试工具,它可以拦截、修改和分析 HTTP 请求和响应。攻击者利用 Burp Suite 的抓包功能,捕获在凡诺后台修改密码时浏览器发送的请求。
请求类型与关键信息:
没有 Token 值:Token 是一种用于防止 CSRF 攻击的机制,通常是服务器生成的一个随机字符串,会在每次请求中附带。如果请求中没有 Token 值,说明该系统在修改密码这个功能上可能没有实现有效的 CSRF 防护,这为攻击者提供了可乘之机。
POST 请求:抓包结果显示修改密码的请求是一个 POST 请求。POST 请求通常用于向服务器提交数据,在修改密码的场景中,新密码等重要信息会通过 POST 请求发送到服务器。
-
使用 Burp Suite 生成 POC(Proof of Concept,概念验证)
POC 生成过程:- 通过分析生成的 POC 代码,可以看到请求的详细信息,包括请求的 URL、请求方法(POST)、请求参数(如用户名、新密码等)。
在 Burp Suite 中,攻击者可以利用抓包得到的请求信息,使用其内置的功能生成一个 POC。这个 POC 本质上是一段可以模拟用户修改密码请求的代码,通常是一段 JavaScript 代码。
将修改后的 JavaScript 代码复制到一个新的 HTML 文件中。HTML 文件可以在浏览器中打开,当浏览器加载这个 HTML 文件时,其中的 JavaScript 代码会自动执行,向凡诺后台服务器发送修改密码的请求。
- 修改代码并创建 HTML 文件:这里将1234567的密码修改为12345678,将代码放在单独的文件中

- 废弃 Burp Suite 数据包:在完成 HTML 文件的创建后,攻击者不再需要之前在 Burp Suite 中捕获的原始数据包,因此可以将其废弃。
- 通过分析生成的 POC 代码,可以看到请求的详细信息,包括请求的 URL、请求方法(POST)、请求参数(如用户名、新密码等)。
-
诱导被攻击者打开 HTML 文件
- 攻击原理:当被攻击者在已经登录凡诺后台的状态下打开攻击者构造的 HTML 文件时,浏览器会执行其中的 JavaScript 代码,向凡诺后台服务器发送修改密码的请求。由于被攻击者的浏览器中保存着登录凡诺后台的会话信息(如 Cookie),服务器会认为这个请求是由合法用户发起的,从而执行修改密码的操作。在这里我们在本机环境中进行演示。
- 攻击成功标志:如果被攻击者成功打开了 HTML 文件,并且服务器接受了修改密码的请求,那么攻击就成功了。攻击者可以通过检查凡诺后台的密码是否被修改来确认攻击结果。

- 此时输入1234567发现密码错误,已经更改为12345678

防御措施
-
验证请求来源
- Referer 验证:服务器可以通过检查请求头中的 Referer 字段来判断请求的来源。如果 Referer 字段的值不符合预期,说明请求可能来自恶意网站,可以拒绝该请求。但需要注意的是,Referer 字段可以被篡改,因此这种方法并不是绝对安全的。
- 同源策略:现代浏览器遵循同源策略,只有来自同一源(协议、域名和端口都相同)的页面才能直接访问另一个页面的资源。服务器可以利用这一特性,确保请求来自合法的源。
- 使用 CSRF Token
- 生成 Token:服务器在用户访问包含敏感操作的页面时,生成一个随机且唯一的 CSRF Token,并将其存储在服务器端(如会话中),同时将 Token 嵌入到页面中(如隐藏表单字段或请求头)。
- 验证 Token:当用户提交请求时,客户端需要将 Token 一并发送给服务器。服务器验证客户端提交的 Token 与服务器端存储的 Token 是否一致,如果一致则认为请求合法,否则拒绝请求。
-
设置 SameSite 属性
SameSite 是 Cookie 的一个属性,用于控制 Cookie 在跨站请求中的传递。可以将 Cookie 的 SameSite 属性设置为 “Strict” 或 “Lax”,以限制 Cookie 只在同源请求或同站请求中传递,从而减少 CSRF 攻击的风险。
双重提交 Cookie
服务器在用户访问页面时,生成一个随机的 Token 并将其存储在 Cookie 中,同时将该 Token 嵌入到页面的表单字段或请求头中。当用户提交请求时,服务器会比较 Cookie 中的 Token 和请求中携带的 Token 是否一致,如果一致则认为请求合法。
结语
CSRF 漏洞虽然隐蔽,但只要开发者和用户提高安全意识,采取有效的防范措施,就能大大降低其带来的风险。对于开发者来说,要在代码层面增加对请求来源的验证,使用 Token 等技术防止恶意请求。对于用户而言,要谨慎点击不明链接,尤其是在已登录重要网站的情况下。网络安全是一场持久战,需要我们不断学习和实践,共同守护网络空间的安全。
相关文章:
深入剖析 CSRF 漏洞:原理、危害案例与防护
目录 前言 漏洞介绍 漏洞原理 产生条件 产生的危害 靶场练习 post 请求csrf案例 防御措施 验证请求来源 设置 SameSite 属性 双重提交 Cookie 结语 前言 在网络安全领域,各类漏洞层出不穷,时刻威胁着用户的隐私与数据安全。跨站请求伪造&…...
C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库
用C实现高性能数据处理,Python实现操作Redshift导入数据文件。 在Visual Studio 2022中用C和ODBC API导出SQL Server数据库中张表中的所有表的数据为CSV文件格式的数据流,用逗号作为分隔符,用双引号包裹每个数据,字符串类型的数据…...
AI大模型开发原理篇-5:循环神经网络RNN
神经概率语言模型NPLM也存在一些明显的不足之处:模型结构简单,窗口大小固定,缺乏长距离依赖捕捉,训练效率低,词汇表固定等。为了解决这些问题,研究人员提出了一些更先进的神经网络语言模型,如循环神经网络、…...
4-图像梯度计算
文章目录 4.图像梯度计算(1)Sobel算子(2)梯度计算方法(3)Scharr与Laplacian算子4.图像梯度计算 (1)Sobel算子 图像梯度-Sobel算子 Sobel算子是一种经典的图像边缘检测算子,广泛应用于图像处理和计算机视觉领域。以下是关于Sobel算子的详细介绍: 基本原理 Sobel算子…...
数据结构与算法 —— 常用算法模版
数据结构与算法 —— 常用算法模版 二分查找素数筛最大公约数与最小公倍数 二分查找 人间若有天堂,大马士革必在其中;天堂若在天空,大马士革必与之齐名。 —— 阿拉伯谚语 算法若有排序,二分查找必在其中;排序若要使用…...
DDD - 领域事件_解耦微服务的关键
文章目录 Pre领域事件的核心概念领域事件的作用领域事件的识别领域事件的技术实现领域事件的运行机制案例领域事件驱动的优势 Pre DDD - 微服务设计与领域驱动设计实战(中)_ 解决微服务拆分难题 EDA - Spring Boot构建基于事件驱动的消息系统 领域事件的核心概念 领域事件&a…...
芯片AI深度实战:实战篇之vim chat
利用vim-ollama这个vim插件,可以在vim内和本地大模型聊天。 系列文章: 芯片AI深度实战:基础篇之Ollama-CSDN博客 芯片AI深度实战:基础篇之langchain-CSDN博客 芯片AI深度实战:实战篇之vim chat-CSDN博客 芯片AI深度…...
【产品经理学习案例——AI翻译棒出海业务】
前言: 本文主要讲述了硬件产品在出海过程中,翻译质量、翻译速度和本地化落地策略是硬件产品规划需要考虑的核心因素。针对不同国家,需要优化翻译质量和算法,关注市场需求和文化差异,以便更好地满足当地用户的需求。同…...
解决运行npm时报错
在运行一个Vue项目时报错,产生下面问题 D:\node\npm.cmd run dev npm WARN logfile could not be created: Error: EPERM: operation not permitted, open D:\node\node_cache\_logs\2025-01-31T01_01_58_076Z-debug-0.log npm WARN logfile could not be created:…...
【07-编译工程与导入网表】
这里写自定义目录标题 一丶编译原理图编译默认属性一丶编译项目二丶输出BOM材料报告优化EXCEL-BOM清单 三丶输出PDF原理图给维修人员看 四丶导入网格表查看是否有错误常见错误 其他问题什么是位号(C1)?EXCEL添加序号列和居中显示?位号(序号)与单位(型号)EXCEL设置自动换行 编…...
FireFox | Google Chrome | Microsoft Edge 禁用更新 final版
之前的方式要么失效,要么对设备有要求,这次梳理一下对设备、环境几乎没有要求的通用方式,universal & final 版。 1.Firefox 方式 FireFox火狐浏览器企业策略禁止更新_火狐浏览器禁止更新-CSDN博客 这应该是目前最好用的方式。火狐也…...
conda配置channel
你收到 CondaKeyError: channels: value https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main not present in config 错误是因为该镜像源(https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main)可能没有被正确添加到 Conda 的配置文件中&…...
【MQ】探索 Kafka
基本概念 主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。 分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。消息位移:Offset。表示分区中每条消息的位置信息,是一个…...
Workbench 中的热源仿真
探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下,热源 (q) 不是通…...
计算机网络 笔记 网络层 3
IPv6 IPv6 是互联网协议第 6 版(Internet Protocol Version 6)的缩写,它是下一代互联网协议,旨在解决 IPv4 面临的一些问题,以下是关于 IPv6 的详细介绍: 产生背景: 随着互联网的迅速发展&…...
翼星求生服务器搭建【Icarus Dedicated Server For Linux】
一、前言 本次搭建的服务器为Steam平台一款名为Icarus的沙盒、生存、建造游戏,由于官方只提供了Windows版本服务器导致很多热爱Linux的小伙伴无法释怀,众所周知Linux才是专业服务器的唯一准则。虽然Github上已经有大佬制作了容器版本但是容终究不够完美,毕竟容器无法与原生L…...
ZZNUOJ(C/C++)基础练习1011——1020(详解版)
目录 1011 : 圆柱体表面积 C语言版 C版 1012 : 求绝对值 C语言版 C版 1013 : 求两点间距离 C语言版 C版 1014 : 求三角形的面积 C语言版 C版 1015 : 二次方程的实根 C语言版 C版 1016 : 银行利率 C语言版 C版 1017 : 表面积和体积 C语言版 C版 代码逻辑…...
论文阅读:Realistic Noise Synthesis with Diffusion Models
这篇文章是 2025 AAAI 的一篇工作,主要介绍的是用扩散模型实现对真实噪声的仿真模拟 Abstract 深度去噪模型需要大量来自现实世界的训练数据,而获取这些数据颇具挑战性。当前的噪声合成技术难以准确模拟复杂的噪声分布。我们提出一种新颖的逼真噪声合成…...
复杂场景使用xpath定位元素
在复杂场景下使用XPath定位元素时,可以通过以下高级技巧提高定位准确性和稳定性: 动态属性处理 模糊匹配: //div[contains(id, dynamic-part)] //button[starts-with(name, btn-)] //input[ends-with(class, -input)] (需XPath 2.0)多属性…...
算法基础——存储
引入 基础理论的进步,是推动技术实现重大突破,促使相关领域的技术达成跨越式发展的核心。 在发展日新月异的大数据领域,基础理论的核心无疑是算法。不管是技术设计,还是工程实践,都必须仰仗相关算法的支持࿰…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
