Cookie 容易受到多种安全攻击,了解这些攻击方式和防护措施对于构建安全的 Web 应用至关重要。
常见 Cookie 攻击方式
- XSS(跨站脚本攻击)窃取 Cookie
- 攻击者通过注入恶意脚本读取 document.cookie
- 防护:使用 HttpOnly 标志
javascript// 不安全:可被 XSS 窃取 document.cookie = "token=abc123"; // 安全:HttpOnly 防止 JavaScript 访问 Set-Cookie: token=abc123; HttpOnly
- CSRF(跨站请求伪造)
- 攻击者诱导用户发送跨站请求,浏览器自动携带 Cookie
- 防护:使用 SameSite 属性、CSRF Token
javascript// 防护示例 Set-Cookie: token=abc123; SameSite=Strict
- 中间人攻击
- 在非加密连接中截获 Cookie
- 防护:使用 Secure 标志,强制 HTTPS
javascriptSet-Cookie: token=abc123; Secure
- Cookie 注入
- 攻击者伪造或篡改 Cookie 值
- 防护:对 Cookie 值进行签名或加密
Cookie 安全最佳实践
- 设置安全标志
javascript// 完整的安全 Cookie 示例 Set-Cookie: sessionId=xyz123; HttpOnly; Secure; SameSite=Strict; Path=/; Domain=.example.com; Max-Age=3600
- 敏感数据处理
- 不在 Cookie 中存储明文密码
- 使用加密或签名验证 Cookie 完整性
- 定期轮换 Session ID
- 过期时间管理
- 设置合理的过期时间
- 敏感操作后立即失效 Cookie
- 实现"记住我"功能时使用持久 Cookie
- 服务器端验证
- 验证 Cookie 的来源和完整性
- 检查 IP 和 User-Agent 变化
- 实现速率限制防止暴力破解
代码示例:安全的 Cookie 设置
javascript// Node.js Express 示例 res.cookie('token', encryptedToken, { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'strict', maxAge: 3600000, // 1小时 domain: '.example.com' });
GDPR 和隐私合规
- 获取用户同意后才能设置 Cookie
- 提供清晰的 Cookie 政策说明
- 实现 Cookie 同意横幅