概述
会话固定让攻击者提前种下一个已知会话 id,待受害者登录后共享其已认证会话。防御的关键是在认证成功的那一刻重新生成会话标识,并销毁旧的会话,而不是只设一个新 Cookie。
关键步骤
- 认证成功后立即重新生成会话 id。
- 使登录前的会话数据与 Cookie 失效。
- 在权限提升与登出时同样轮换。
- 设置 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 });
});
});