乐闻世界logo
搜索文章和话题

如何使用 CSRF Token 防护跨站请求伪造攻击?

2月21日 16:11

CSRF Token 是防止跨站请求伪造攻击最常用和最有效的防护机制之一。

CSRF Token 的基本原理

CSRF Token 是一个随机生成的、不可预测的字符串,服务器在用户访问受保护的页面时生成,并将其嵌入到表单中或通过其他方式传递给客户端。当用户提交表单时,服务器会验证请求中包含的 Token 是否与服务器存储的 Token 匹配。

Token 的生成和存储

  1. 生成阶段

    • 使用加密安全的随机数生成器
    • Token 应该足够长(至少 128 位)
    • 包含时间戳或会话 ID 等信息
    • 可以使用 UUID 或其他唯一标识符
  2. 存储方式

    • 服务器端 Session:最常用的方式,将 Token 存储在用户 Session 中
    • 加密 Cookie:将加密后的 Token 存储在 Cookie 中
    • 数据库:将 Token 与用户关联存储在数据库中

Token 的验证流程

  1. 用户访问表单页面时,服务器生成 Token
  2. Token 被嵌入到表单的隐藏字段中
  3. 用户提交表单时,Token 随请求发送到服务器
  4. 服务器验证请求中的 Token 是否与 Session 中的 Token 匹配
  5. 验证成功则处理请求,失败则拒绝请求

实现示例

javascript
// 生成 Token function generateCSRFToken() { return crypto.randomBytes(32).toString('hex'); } // 中间件验证 Token function csrfProtection(req, res, next) { const token = req.body._csrf || req.headers['x-csrf-token']; if (token !== req.session.csrfToken) { return res.status(403).send('Invalid CSRF token'); } next(); }

Token 的安全注意事项

  1. 一次性使用:每次请求后应该更新 Token
  2. 时效性:Token 应该有过期时间
  3. 唯一性:每个用户会话应该有独立的 Token
  4. 不可预测性:使用加密安全的随机数生成器
  5. HTTPS 传输:确保 Token 在传输过程中不被窃取

与其他防护措施的配合

CSRF Token 通常与其他防护措施配合使用:

  • SameSite Cookie 属性
  • Referer 头验证
  • 自定义 HTTP 头

这种多层防护策略可以提供更全面的安全保护。

标签:CSRF