2.3 跨站请求伪造(CSRF)防护
什么是CSRF?
跨站请求伪造(CSRF)是一种恶意攻击方式,攻击者诱导用户在已认证的Web应用中执行非预期的操作。例如,用户登录银行网站后,误点击恶意链接,导致自动发起转账请求。这种攻击利用的是用户对目标站点的信任和浏览器的自动携带凭证机制。
CSRF的攻击原理
- 身份验证依赖:用户已登录目标网站(如邮箱、网银),会话凭证(如Cookie)有效。
- 诱导触发:攻击者通过钓鱼邮件、恶意页面等诱使用户访问伪造的请求链接。
- 自动执行:浏览器自动携带用户的凭证发起请求,服务器无法区分是否为用户自愿操作。
防御策略
1. CSRF Token
- 核心思想:为每个表单或敏感请求生成唯一的随机令牌(Token),服务端验证其合法性。
- 实现方式:
- 令牌嵌入表单隐藏字段或HTTP头(如
X-CSRF-Token
)。 - 服务器校验令牌与用户会话是否匹配,拒绝非法请求。
- 令牌嵌入表单隐藏字段或HTTP头(如
2. SameSite Cookie属性
- 通过设置Cookie的
SameSite
属性限制跨站请求:Strict
:完全禁止跨站携带Cookie(适用于高敏感操作)。Lax
:仅允许安全HTTP方法(如GET)的跨站请求(平衡安全与用户体验)。
3. 验证HTTP Referer/Origin头
- 检查请求来源是否为合法域名,但需注意:
- Referer可能被篡改或隐私设置禁用。
- Origin头更可靠(适用于AJAX请求)。
4. 关键操作二次验证
- 对敏感操作(如转账、改密)要求用户:
- 重新输入密码。
- 使用短信/邮箱验证码。
实际应用示例
<!-- 表单中嵌入CSRF Token -->
<form action="/transfer" method="POST">
<input type="hidden" name="csrf_token" value="随机生成的令牌">
<input type="text" name="amount">
<button type="submit">确认转账</button>
</form>
为什么这些措施有效?
- Token机制:攻击者无法预测或窃取动态令牌。
- SameSite Cookie:从源头阻断恶意请求携带凭证。
- 多层防御:结合多种策略可显著降低风险,符合“纵深防御”原则。
CSRF防护是Web安全的基石之一,合理部署能有效保护用户免受“隐身攻击”的威胁。
这一切,似未曾拥有