← 中文资源

简体中文版本

防止登录时的会话固定攻击

在权限变更时轮换会话标识,认证后重新生成 Cookie,并使登录前的会话失效,使被固定的 id 无法复用。

阅读英文原文

概述

会话固定让攻击者提前种下一个已知会话 id,待受害者登录后共享其已认证会话。防御的关键是在认证成功的那一刻重新生成会话标识,并销毁旧的会话,而不是只设一个新 Cookie。

关键步骤

  1. 认证成功后立即重新生成会话 id。
  2. 使登录前的会话数据与 Cookie 失效。
  3. 在权限提升与登出时同样轮换。
  4. 设置 HttpOnly、Secure 与合理 SameSite 的 Cookie 属性。

验证

  • 登录后会话 id 与之前不同。
  • 旧会话 id 不再对应有效会话。
  • 登录时携带的固定 id 无法继续使用。
  • 其他标签页按预期需要重新认证。

注意事项

  • 轮换会让同用户的其他标签页登出,除非刻意共享会话。
  • 它不能缓解登录后令牌被盗,那需要 TLS 与短期凭证。

适用范围

本条目围绕「防止登录时的会话固定攻击」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

app.post('/login', (req, res) => {
  // verify credentials first
  req.session.regenerate((err) => {
    if (err) return res.status(500).end();
    req.session.userId = user.id;
    res.json({ ok: true });
  });
});