背景与价值会话固定攻击通过在登录前设置会话ID并复用会话。登录与权限变更及时轮换会话ID可阻断此类攻击。统一规范登录轮换:登录成功后生成新会话ID并替换Cookie。权限变更:提权或敏感操作前轮换会话ID。旧会话失效:立刻标记旧ID失效并拒绝使用。核心实现会话存储与轮换type Sess = { id: string; userId?: string; valid: boolean; createdAt: number } class Store { map = new Map<string, Sess>() now(): number { return Date.now() } create(): Sess { const s: Sess = { id: Math.random().toString(36).slice(2), valid: true, createdAt: this.now() }; this.map.set(s.id, s); return s } bind(id: string, userId: string) { const s = this.map.get(id); if (s) s.userId = userId } invalidate(id: string) { const s = this.map.get(id); if (s) s.valid = false } } type Res = { setHeader: (k: string, v: string) => void } function setSessCookie(res: Res, id: string) { res.setHeader('Set-Cookie', `__Host-sid=${encodeURIComponent(id)}; Path=/; HttpOnly; Secure; SameSite=Lax`) } function rotate(store: Store, oldId: string, res: Res): string { store.invalidate(oldId); const s = store.create(); setSessCookie(res, s.id); return s.id } 落地建议登录成功后立即轮换会话ID并绑定用户;权限变更或提权前统一轮换。旧会话ID立即失效并拒绝使用;配合IP/设备指纹审计。验证清单登录与提权路径是否执行轮换;旧ID是否失效;Cookie属性是否安全。

发表评论 取消回复