做 Web 安全或者开发的朋友,可能听过 “CSRF” 这个词,但不少人会和 XSS 搞混 —— 明明都是客户端攻击,到底有啥不一样?今天就从实际场景出发,把 CSRF 的原理、实战案例、防御手段讲透,新手也能看懂,还能跟着复现。

一、CSRF 到底是啥?和 XSS 有啥区别?
  1. 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?
  1. 加 Token 验证(最推荐,防绝大多数情况)

  2. 验证 HTTP Referer 字段(辅助防御)

  3. 高危操作加验证码 / 二次验证(防关键风险)

  4. 自动注销登录状态(减少风险窗口)

  5. 自定义 HTTP 头并验证(适合 API 接口)

六、最后总结:CSRF 防御的核心思路

CSRF 的攻击逻辑很简单:利用登录状态 + 欺骗点击,但防御也不用复杂 —— 记住两个核心点:

1.验证请求来源:用 Referer、自定义头确认请求是来自本站,不是外部恶意页面。

2.加随机验证信息:用 Token 确保请求是用户主动发起的,攻击者没法伪造。

(提示:测试一定要在合法授权的环境下进行,禁止未经允许测试他人网站,遵守法律和道德底线!)

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐