Web应用安全 · kp-015
会话管理与认证安全
一句话定义
会话管理决定"登录状态如何安全地维持与撤销",认证安全决定"身份如何被可信地建立"——前者要管好会话 ID 的生成、传输、生命周期,后者要管好口令存储、多因素认证(MFA)与暴力破解防护。
为什么重要
账号接管(ATO)是现实中用户损失最直接的类别,其根源几乎都在本课范围:弱口令存储、无速率限制的登录、可预测的会话 ID、登出后凭证仍有效。这也是防御工程投入产出比最高的模块之一——按 NIST 800-63B 的清单做对几件事,就能挡掉绝大多数自动化撞库与凭证填充攻击。
前置知识
kp-002(AAA):本课是认证段的工程实现。 kp-011(Web 攻击面):Cookie 属性与会话载体。
核心概念
- 会话 ID 要求:CSPRNG 生成、≥128 位熵、不可预测;Cookie 属性齐全(HttpOnly/Secure/SameSite,见 kp-011)。
- 会话生命周期:空闲超时 + 绝对超时;登出必须服务端销毁会话(仅清客户端 Cookie 不够);登录成功后重新生成会话 ID(防会话固定)。
- 口令存储:Argon2id 或 bcrypt 等慢哈希 + 每用户唯一盐(原理见 kp-008)。
- 口令策略(NIST 800-63B 方向):长度优先于复杂度规则;不强制周期性更换;对照已知泄露口令库拒绝常见口令;允许粘贴与密码管理器。
- MFA:TOTP(时间型一次性码)与 WebAuthn/通行密钥(FIDO2,硬件级、抗钓鱼);SMS 可用但因 SIM 卡劫持风险被视为弱因子。
- 暴力破解防护:按账号与按 IP 双维度限速、指数退避、失败锁定阈值告警(不是永久锁定——那会变成针对用户的拒绝服务)。
公式、模型或图示
登录流程安全要点:
[提交凭证] ─▶ 服务端校验(慢哈希比对,恒定时间)
├─ 失败:统一错误信息(不区分"用户不存在/密码错")+ 计数限速
└─ 成功:重新生成会话 ID ─▶ Set-Cookie(HttpOnly,Secure,SameSite)
└─▶ 记录审计日志(kp-002)
会话凭证熵:ID ≥ 128 bit(CSPRNG)原理与机制
会话安全的中心思想是"凭证随时可撤销且撤销立即生效":服务端会话存储(而非纯无状态令牌)天然支持主动失效,JWT 类无状态方案则必须辅以短有效期与黑名单/轮换机制,否则"登出"只是客户端删除。认证安全的中心思想是"把攻击成本抬到不经济":慢哈希抬高离线爆破成本(每万亿次猜测需要可观的算力与电力),限速抬高在线爆破成本,MFA 则把"拿到口令"从充分条件变为必要不充分条件。统一错误信息防的是用户枚举——攻击者靠"该用户不存在/密码错误"的差异批量筛选有效账号,这是凭证填充(用泄露库试登录)的前置侦察。
实例或案例
防御撞库的完整组合:登录接口对单账号 5 次失败后进入指数退避并触发邮件/站内提醒;登录页接入已知泄露口令检查(注册时校验);高敏感操作(改密、改绑)要求二次验证;全部登录事件(成功/失败/异地)进入审计日志供 kp-027 检测规则消费。
直观类比
会话像酒店房卡:卡本身可以复制风险低(随机 ID)、离店(登出)时前台立即注销、长期住客也要定期换卡(轮换);MFA 像电梯还需要指纹——捡到房卡也上不了行政楼层。
常见误区
- "强制 90 天换密码更安全":NIST 800-63B 明确反对——用户被迫做出规律性弱变换(Password1 → Password2),实际降低熵。
- "复杂度规则越长越好":长度与可记忆性比符号堆砌更有效;禁用已泄露口令比对更有价值。
- "登出只是前端删除 Cookie":服务端会话仍有效,凭证被复用即接管;登出必须服务端销毁。
与其他知识点的关系
- kp-008(哈希与 HMAC):口令存储的算法层原理。
- kp-014(CSRF):SameSite 属性同时服务两课。
- kp-027(日志、检测与 SIEM):登录事件是最有价值的检测数据源之一。
自测题
- 为什么登录成功后要重新生成会话 ID?要点:防会话固定——攻击者预先种下的 ID 在提权后必须作废。
- 列出 NIST 800-63B 口令策略与旧观念的三处不同。要点:长度优先、不强制周期更换、对照泄露库;另允许密码管理器。
- 为什么 SMS MFA 被视为弱因子?要点:SIM 劫持/换卡攻击可截获验证码;TOTP/WebAuthn 不依赖运营商信道。
延伸阅读
《NIST SP 800-63B: Digital Identity Guidelines》:认证器类型与口令策略的权威标准。