🔐 CSRF Token

CSRF令牌生成,随机CSRF Token生成,防护指南

⚙️ Token配置
🔑 生成的Token
📖 CSRF防护指南
什么是CSRF?
跨站请求伪造(Cross-Site Request Forgery)是一种攻击,诱导用户在已认证的Web应用上执行非预期操作。

防护方案:
// 1. Synchronizer Token Pattern (同步令牌) // 服务端生成Token,存入Session app.use((req, res, next) => { if (!req.session.csrfToken) { req.session.csrfToken = crypto.randomBytes(32).toString('base64'); } res.locals.csrfToken = req.session.csrfToken; next(); }); // 表单中嵌入隐藏字段 // <input type="hidden" name="_csrf" value="{{csrfToken}}"> // 验证Token app.post('/api/*', (req, res, next) => { if (req.headers['x-csrf-token'] !== req.session.csrfToken) { return res.status(403).json({ error: 'CSRF token mismatch' }); } next(); }); // 2. Double Submit Cookie (双重提交Cookie) // 设置Cookie: Set-Cookie: csrfToken=xxx; SameSite=Strict // 请求时在Header中发送: X-CSRF-Token: xxx // 服务端比较Cookie和Header中的Token // 3. SameSite Cookie属性 Set-Cookie: session=abc; SameSite=Strict; Secure; HttpOnly
最佳实践:
• Token必须使用加密安全的随机数生成器(CSPRNG)
• Token长度至少128位(16字节)
• 每个会话使用不同的Token
• 敏感操作需要重新验证Token
• 结合SameSite Cookie属性
• 验证Referer/Origin头作为辅助