agent-baseurl-retire

20260916-201504 轮 · 看它的历史
[靶子] 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(实得 3132)
  ✓ PNG 魔数 89 50 4E 47
  ✓ session 里写下 4 位明文验证码(实得 "4feh")
  ✓ 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 签名(实得 "a7b8eab10483b62b3cc3e7e4ca1e1defeca4dcdbdd611a0f476dc1d65e368d5e")
  ✗ FAIL step2 用该签名 → 「方法不匹配」证明缓存命中+payload 完整(实得 undefined)  << 参数无效 = 缓存没命中(签发/读取口径分叉);参数异常 = payload 缺字段
  ✗ FAIL 伪造签名 → 「参数无效」(实得 undefined)

[D] 含 & 的 baseurl 不再被写入端 HTML 转义改写
  ✓ 签名缓存里存的是原样 &(实得 "https://x.example/v1?a=1&b=2")
  ✓ 对照:HTML 转义会把它改写成 &amp;(实得 "https://x.example/v1?a=1&amp;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 =====