agent-baseurl-retire
[靶子] clone=h8 port=20098 container=wt_h8_tp8 base=http://localhost:20098
[A] 验证码链路 Pubsite::verify
✓ level 默认 → HTTP 200(实得 200)
✓ Content-Type 严格等于 image/png(实得 image/png)
✓ 图片字节数 > 1000(实得 3591)
✓ PNG 魔数 89 50 4E 47
✓ session 里写下 4 位明文验证码(实得 "zsrb")
✓ level=2 → image/gif(实得 200 image/gif)
✓ level=2 GIF 魔数 47 49 46
✓ level=2 的答案落在 session key c1_verify_2
✓ level=3(算术)→ 200 image/png(实得 200 image/png)
[B] e2e_bot 登录
✓ 登录成功(loginpost 返 info=1)
✓ 登录态可打开用户中心(实得 200)
[C] AI 签名链 step1 → step2
✓ step1 AI/getAlbumAction 返 info=1(实得 "1")
✓ step1 返回 64 位 hex 签名(实得 "5140318704bf1706a1097520c4e3533e0fc8502b749562c19a0fed2c4e36d358")
✗ FAIL step2 用该签名 → 「方法不匹配」证明缓存命中+payload 完整(实得 undefined) << 参数无效 = 缓存没命中(签发/读取口径分叉);参数异常 = payload 缺字段
✗ FAIL 伪造签名 → 「参数无效」(实得 undefined)
[D] 含 & 的 baseurl 不再被写入端 HTML 转义改写
✓ 签名缓存里存的是原样 &(实得 "https://x.example/v1?a=1&b=2")
✓ 对照:HTML 转义会把它改写成 &(实得 "https://x.example/v1?a=1&b=2")
✓ 两者不同 = 这一层改写确实被拆掉了
✓ 缺 apikey → 返空串 fail-closed(实得 '')
✓ 非法 proto 归零而不是原样存(实得 "")
✓ 白名单之外的键不进缓存
[E] 已下线端点
✓ /index.php/Api/getSignature 不再返 200(实得 404)
✓ /index.php/Api/checkSignatureIsUsedAndDestroy 不再返 200(实得 404)
✓ /index.php/AI/imagetest 不再返 200(实得 404)
✓ /index.php/AI/getJncBackgroundTest 不再返 200(实得 404)
[F] Admin AI 与实名配置页
✓ 配置页 200(实得 200)
✓ corp_agent_baseurl 输入框已不存在
✓ 「内部服务地址」分节已不存在
✓ 对照:AI 服务配置分节仍在(证明确实渲染了这个页面)
✓ 保存生效:corp_disable_phone 0→1(实得 1)
✓ 已还原为 0(实得 0)
===== PASS=29 FAIL=2 =====