# 什么是 CSRF 攻击
CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种 Web 安全漏洞,攻击者诱使用户在不知情的情况下,以其已认证的身份向目标网站发送恶意请求。
# 基本工作原理
- 用户登录并认证了目标网站(如银行网站)
- 用户在同一浏览器中访问了攻击者控制的恶意网站
- 恶意网站包含自动向目标网站发送请求的代码
- 由于用户已认证,请求会携带用户的认证信息(如 Cookie)
- 目标网站无法区分这是用户的合法请求还是攻击者的伪造请求
# 典型攻击示例
假设银行网站的转账接口如下:
GET http://bank.com/transfer?to=攻击者账户&amount=1000
攻击者在恶意网站中插入:
1 |
|
当已登录银行网站的用户访问该恶意页面时,浏览器会自动发送转账请求。
# CSRF 攻击的特点
- 依赖用户已认证的状态:利用用户的登录凭证
- 跨站点:攻击来自第三方网站
- 伪造请求:非用户本意的操作
- GET 和 POST 都可能被利用
# 潜在危害
- 以用户身份执行敏感操作(转账、改密等)
- 修改用户账户信息
- 购买商品或服务
- 发布内容或消息
- 删除或修改数据
# 防御措施
# 1. 使用 CSRF Token(最有效方法)
服务器生成随机 Token 并嵌入表单
提交请求时必须包含有效 Token
Token 与用户会话关联
1 |
|
# 2. 检查 Referer/Origin 头部
- 验证请求来源是否合法
- 但某些情况下 Referer 可能被剥离
# 3. SameSite Cookie 属性
- 限制 Cookie 在跨站请求时发送
Set-Cookie: sessionid=xxxx; SameSite=Strict
Strict
:完全禁止跨站发送Lax
:宽松模式,允许某些安全请求
# 4. 关键操作要求二次验证
- 重要操作(如转账)需要重新输入密码
- 使用短信 / 邮件验证码
# 5. 限制敏感操作的 HTTP 方法
- 只允许 POST 请求执行敏感操作
- 避免使用 GET 请求修改数据
# CSRF vs XSS 区别
特性 CSRF XSS
攻击目标 利用用户的认证状态 窃取用户数据或会话
执行位置 目标网站 用户浏览器
是否需要用户交互 需要用户访问恶意页面 只需用户访问被注入的页面
防御重点 验证请求来源和意图 过滤输入和编码输出