## 认证与会话管理缺陷（High）

### 触发信号

- 密码/Token 比较操作（`==`、`===`、`equals`、`compare`）
- 会话管理代码（`session`、`cookie`、`jwt`、`token`、`refreshToken`）
- 密码处理（`hash`、`bcrypt`、`pbkdf2`、`scrypt`）
- 登录/注册/密码重置流程

### 判定流程

1. **检查密码比较**：`Read` 确认密码/Token 比较是否使用常量时间比较：
   - 使用 `==`/`===` → 时序攻击风险
   - 应使用 `crypto.timingSafeEqual`、`bcrypt.compare`、`hmac.compare`
2. **检查密码存储**：`Read` 确认密码是否使用安全的哈希算法：
   - 应使用 `bcrypt`/`scrypt`/`argon2`（自带盐值和自适应计算成本）
   - 使用 `md5`/`sha1`/`sha256` + 固定盐 → 不安全
   - 明文存储 → 严重缺陷
3. **检查会话管理**：`Read` 确认会话安全：
   - Session ID 生成是否使用密码学安全的随机数（`crypto.randomBytes`，非 `Math.random`）
   - Cookie 是否设置 `HttpOnly`（防止 XSS 窃取）、`Secure`（仅 HTTPS）、`SameSite`
   - 会话过期时间是否合理
4. **检查 JWT 安全**：`Read` 确认 JWT 实现：
   - 签名密钥强度（至少 256 位随机密钥）
   - 是否验证签名（而非只解码 `decode` 不验证 `verify`）
   - Token 过期时间（`exp`）是否设置且合理
   - 敏感数据是否存储在 payload 中（payload 仅 Base64 编码，非加密）
5. **检查密码重置流程**：`Read` 确认重置 Token：
   - Token 是否有有效期和单次使用限制
   - Token 是否与用户绑定（防止用 A 的 Token 重置 B 的密码）

### 证据构造

确认缺陷后，输出需包含：
- 缺陷位置（不安全的比较/存储/会话操作，含文件:行号）
- 攻击向量（时序攻击、暴力破解、会话劫持、Token 伪造）
- 业务影响（账户被盗、会话劫持、横向提权）

### 排除

- 已使用 `bcrypt.compare`/`crypto.timingSafeEqual` 做密码比较
- 密码已使用 `bcrypt`/`argon2` 存储
- 会话 Cookie 已设置 `HttpOnly` + `Secure` + `SameSite`
- JWT 已正确验证签名且有合理过期时间
