qr-login-token.sh
靶子: http://localhost:20098 容器: wt_h8_tp8
── A 匿名触发限流 → token 必须被【作废】而不是被【重签】──
✓ 前置:token 已清空
✓ A1 第 22 次失配被限流拦下(响应含频繁提示)
✓ A2 🔴 限流后 userQR 缓存为空(是作废,不是换发)
e2e-qr-login-token.sh: line 77: md5: command not found
e2e-qr-login-token.sh: line 77: md5: command not found
e2e-qr-login-token.sh: line 77: md5: command not found
e2e-qr-login-token.sh: line 77: md5: command not found
e2e-qr-login-token.sh: line 77: md5: command not found
✓ A3 🔴 用 md5(秒) 猜出的 token 一个都登不进去
── B 正路:本人取码 → 扫码登录 → 一次性作废 ──
✓ B1 前置:e2e_bot 登录成功
✓ B2 🔴 新签发的 token 是 32 位十六进制(密码学随机)
✓ B3 🔴 两次签发不相同(不是常量/可预测种子)
✓ B4 本人 token 扫码登录成功(302)
✓ B4 └ 跳转目标 = /User/uploads_app
✓ B4 └ 登录态确实落在 990863 上
✓ B5 同一 token 二次使用:不再 302
✓ B5 └ 且未拿到 990863 登录态
── C token 寿命:TTL=300s,且复用时续期(不换 token) ──
✓ C0 前置:重新登录 e2e_bot(B4 的扫码登录已踢掉上一个 web 会话)
✓ C 前置:拿到 token 且定位到它的缓存文件
✓ C1 记录老到 299 秒时 token 仍在(TTL ≥ 300)
✓ C2 🔴 记录老到 301 秒时 token 已消失(TTL ≤ 300 ⇒ 恰为 300,不再是 6h)
✓ C3 复用分支不换 token(正在被扫的那张码不会当场作废)
✓ C4 🔴 复用分支把寿命续上了(mtime 前移 ≥250s;不续期的话这里恒为 0)
──────────────────────────────
PASS=18 FAIL=0
✅ 全绿