oauth-state-session-bind.sh

20260916-181749 轮 · 看它的历史
靶子 BASE=http://localhost:20098  容器=wt_h8_tp8

【A 组 · 微信扫码链:跨会话必须被拒(用户可见判据)】
  PASS  A0 发起 type=3 拿到 state=dc7efd34f120bf720d3db54bdf323809
  PASS  A1 jar B(全新 cookie)拿 A 的 state 打 wxcallback → 被闸拒
  PASS  A2 jar A 用自己的 state 打 → 过闸(守卫方向:合法流程没被误伤)
  PASS  A3 重放同一 state → 已被一次性消费,被拒
  PASS  A4 会话里有合法 state,但回调不带 state → 被拒
  PASS  A5 会话里有合法 state,但回调带乱 state → 被拒

【B 组 · Facebook 链:跨会话必须被拒(会话存储判据,理由见文件头)】
  PASS  B1 发起 type=4 后,A 的会话里有 c1_fb_oauth_state
  PASS  B2 jar B 拿 A 的 state 打回调后,A 的 state **仍在**(攻击者消费不掉受害者的)
  PASS  B3 jar B 的回调被拒 → 跳首页
  PASS  B4 jar A 自己打回调后,A 的 state 被消费(证明确实走到了消费那一步)

【C 组 · 微博链:同 B 组】
  PASS  C1 发起 type=2 后,A 的会话里有 c1_wb_oauth_state
  PASS  C2 jar B 拿 A 的 state 打回调后,A 的 state 仍在
  PASS  C3 jar A 自己打回调后,A 的 state 被消费

【D 组 · corp 级全局 state 键必须彻底消失 + 三 provider 键名不撞】
  PASS  D1 连发起两次授权,runtime/cache 文件数增量为 0(state 不再进企业级共享缓存)
  PASS  D2 同一会话依次发起 wb/wx/fb,三个 state 键同时存在(键名不互相覆盖)

【E 组 · QQ 链:state 校验失败必须**中止**(修前是校验完把结果扔了)】
  PASS  E1 错 state → 跳首页(修前是跳 /index.php/Login/thirdpartlogin)
  PASS  E2 错 state → 会话里**没有**被种下 c1_thirdlogin
  PASS  E3 发起 type=1 后,A 的会话里有 c1_qq_oauth_state
  PASS  E4 jar B 拿 A 的 state 打回调后,A 的 state 仍在
  PASS  E5 jar B 也没被种下 c1_thirdlogin
  PASS  E6 jar A 自己打回调后,A 的 state 被消费

PASS=21 FAIL=0