CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击方式,攻击者诱导用户在已认证的网站上执行非预期的操作。
工作原理
- 用户登录:用户在目标网站(如银行网站)登录,服务器创建会话并返回 Cookie
- Cookie 存储:浏览器将该网站的 Cookie 存储在本地
- 访问恶意网站:用户访问攻击者控制的恶意网站
- 发送请求:恶意网站包含指向目标网站的请求(如表单提交、AJAX 请求)
- 自动携带 Cookie:浏览器自动发送目标网站的 Cookie
- 执行操作:服务器验证 Cookie 有效,执行请求的操作
攻击条件
- 用户已登录目标网站
- 目标网站使用 Cookie 进行身份验证
- 浏览器自动发送 Cookie
- 目标网站没有其他防护机制
常见攻击场景
- 银行转账
- 修改密码
- 删除数据
- 发送邮件
- 添加管理员账户
防御措施
- CSRF Token:在表单中添加随机 Token,服务器验证
- SameSite Cookie:设置 Cookie 的 SameSite 属性
- 验证 Referer/Origin:检查请求来源
- 双重提交 Cookie:在 Cookie 和请求参数中都包含 Token
- 自定义 Header:使用自定义 Header 进行验证
与 XSS 的区别
- CSRF:利用用户的身份,不需要注入脚本
- XSS:注入恶意脚本,可以窃取 Cookie 或执行任意操作
CSRF 攻击利用了浏览器的自动 Cookie 发送机制,是 Web 应用安全的重要威胁之一。