Appearance
🛡️ CSRF (Cross Site Request Forgery) - 跨站请求伪造攻击
🤔 什么是 CSRF?
CSRF 是一种常见的网络安全漏洞,其本质是利用用户在目标站点的登录状态,在用户不知情的情况下执行未经授权的操作。
🎯 攻击原理
攻击者通过精心构造的陷阱,诱导已登录的用户执行非本意的操作:
正常登录阶段 🔑
- 用户访问并登录合法网站
- 网站向用户浏览器派发身份认证 cookie
- cookie 会在后续请求中自动携带
攻击执行阶段 ⚔️
- 用户在未退出登录的情况下访问恶意网站
- 恶意网站通过各种手段(如图片链接、表单等)向目标站点发起请求
- 浏览器自动携带目标站点的 cookie
- 目标站点无法分辨请求是否是用户本意
这种攻击手法巧妙地绕过了同源策略的限制,因为请求是通过受害者的浏览器发起的,携带了合法的身份认证信息。
🛠️ CSRF 防御策略
1. 🍪 Cookie SameSite 属性
Cookie 的 SameSite 属性提供了三种安全级别:
Strict (严格模式) 🔒
- 完全禁止跨站请求携带 Cookie
- 安全性最高,但可能影响正常的跨站功能
- 适用于高安全要求的应用
Lax (宽松模式) 🔓
- 允许部分安全跨站请求携带 Cookie
- 支持的场景:
- 页面超链接跳转
- GET 表单提交
- 预加载请求
- 推荐的默认配置
None (无限制) ⚠️
- 允许所有跨站请求携带 Cookie
- 需要配合 Secure 属性使用
- 安全性最低,不推荐使用
SameSite 特性需要现代浏览器支持,旧版本浏览器可能存在兼容性问题
2. 🔍 Referer/Origin 验证
服务端可以通过验证请求头中的来源信息来防御 CSRF:
- Referer: 记录完整的来源页面 URL
- Origin: 记录请求的源站信息
服务器通过校验这些头部信息,可以:
- 确保请求来自合法的源站
- 拦截可疑的跨站请求
- 建立请求的可信任链路
3. 🎟️ Token 验证机制
实现基于 Token 的身份验证:
- 每次请求都需要携带独特的 Token
- 请求头:
Authorization: Bearer <token>
- 请求头: