聊一聊CSRF:从原理到实战,再到防御
本文详细解析了CSRF(跨站请求伪造)攻击的原理、与XSS的区别及实战案例。CSRF利用用户登录状态,诱骗其点击恶意链接执行非本意操作,而XSS则通过注入脚本窃取Cookie或篡改页面。文章通过Pikachu靶场演示了GET/POST型CSRF的攻击过程,并列举了个人信息篡改、财产损失等危害。防御措施包括Token验证、Referer检查、验证码等。核心思路是验证请求来源和添加随机验证信息,确保请
做 Web 安全或者开发的朋友,可能听过 “CSRF” 这个词,但不少人会和 XSS 搞混 —— 明明都是客户端攻击,到底有啥不一样?今天就从实际场景出发,把 CSRF 的原理、实战案例、防御手段讲透,新手也能看懂,还能跟着复现。
一、CSRF 到底是啥?和 XSS 有啥区别?
- CSRF 的核心定义
CSRF(跨站请求伪造),简单说就是攻击者利用你在目标网站的登录状态,骗你点击恶意链接 / 访问恶意页面,让浏览器带着你的 Cookie 向目标网站发送请求,从而执行你 “非本意” 的操作(比如下单、转账、改密码)。
2.CSRF和XSS的区别
| 对比维度 | CSRF(跨站请求伪造) | XSS(跨站脚本) |
|---|---|---|
| 核心逻辑 | 借用用户已有的登录状态(Cookie) | 窃取用户的 Cookie 或注入脚本 |
| 攻击路径 | 攻击者→骗用户点击→用户浏览器发请求 | 注入脚本到目标网站→用户访问触发脚本 |
| 依赖条件 | 用户登录状态 + 用户点击恶意链接 | 目标网站有输入点且未过滤脚本 |
| 简单比喻 | 趁你拿钥匙(登录),骗你开门做事 | 偷你钥匙(Cookie),自己开门做事 |
二、CSRF的核心是什么?
CSRF 的核心是 “利用登录状态 + 欺骗用户触发请求”,网站没法区分请求是用户主动发的,还是被欺骗发的。
三、实战复现:Pikachu 靶场的 GET/POST 型 CSRF
理论讲再多不如动手试一次,咱们用 Pikachu 靶场(免费开源,自己搭个环境就能测),分别看 GET 和 POST 两种类型的 CSRF 怎么触发。
get型:
1.GET 型 CSRF:直接构造 URL 就能触发
GET 型 CSRF 最直观,因为请求参数直接放在 URL 里,只要用户点击 URL,就会触发请求。
2.我们进入靶场,看到提示
3.我们随便选一个人(这里我们选vince)

4.修改个人信息为如图:
5.这时候我们抓包,发现所有的参数
6.我们把get请求复制下来并放行

GET /vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=123456&add=1111&email=2222&submit=submit
7.修改参数并改成URL发送,我们发现用户的信息改变
http://www.pikachu.com:80/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=123456789&add=3333&email=4444&submit=submit

post型:
1.POST型CSRF需要构造自动提交的表单
POST 型 CSRF 的参数不在 URL 里,而是在请求体里,所以不能直接用 URL 触发 —— 需要构造一个 HTML 表单,用 JS 自动提交,用户点击后表单会自动发 POST 请求。
2.我们还是修改信息并抓包看一看


发现信息在请求体中,这样我们就不能用get型修改URL来修改信息了。
3.我们修改用户信息,并右键–>相关工具–>生成csrfPoC

4.点击用浏览器测试,会出现一个URL
5.我们打开这个网站,发现是个按钮,点击按钮,发现数据修改

四、CSRF 危害有多大?
1.个人信息篡改:改昵称、头像、绑定手机 / 邮箱。
2.恶意操作:以你的名义发垃圾邮件、群消息,或者在论坛发帖抹黑你。
3.财产损失:如果是支付类网站,可能被构造转账、下单请求,直接扣你的钱。
4.服务器权限:如果是网站后台有 CSRF 漏洞,攻击者可能构造 “创建管理员” 的请求,拿到后台权限,进而控制服务器。
5.设备配置篡改:比如路由器的 Web 管理界面有 CSRF 漏洞,攻击者可能改你的 DNS,让你访问钓鱼网站。
五、怎么防 CSRF?
-
加 Token 验证(最推荐,防绝大多数情况)
-
验证 HTTP Referer 字段(辅助防御)
-
高危操作加验证码 / 二次验证(防关键风险)
-
自动注销登录状态(减少风险窗口)
-
自定义 HTTP 头并验证(适合 API 接口)
六、最后总结:CSRF 防御的核心思路
CSRF 的攻击逻辑很简单:利用登录状态 + 欺骗点击,但防御也不用复杂 —— 记住两个核心点:
1.验证请求来源:用 Referer、自定义头确认请求是来自本站,不是外部恶意页面。
2.加随机验证信息:用 Token 确保请求是用户主动发起的,攻击者没法伪造。
(提示:测试一定要在合法授权的环境下进行,禁止未经允许测试他人网站,遵守法律和道德底线!)
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)