nonpublic-action-gate
靶子 http://localhost:20098(TP8_PORT=20098,容器 wt_h8_tp8)
── A 组:非 public / 魔术方法必须 404(本次改动的核心通路)──
✅ Login/initialize → 404 实际 404
✅ Index/initialize → 404 实际 404
✅ User/initialize → 404 实际 404
✅ Flash/initialize → 404 实际 404
✅ Order/initialize → 404 实际 404
✅ WxApi/initialize → 404 实际 404
✅ WxAuth/initialize → 404 实际 404
✅ WxWeb/initialize → 404 实际 404
✅ PayV2/initialize → 404 实际 404
✅ WxPayV3/initialize → 404 实际 404
✅ DDM/initialize → 404 实际 404
✅ SucaiManager/initialize → 404 实际 404
✅ Login/__construct → 404 实际 404
✅ User/__construct → 404 实际 404
✅ Login/__call → 404 实际 404
✅ Login/_denyDirectUrlAccess → 404 实际 404
✅ Login/_notFound → 404 实际 404
✅ Flash/_ddmRecordMissPics(带 array 参数) → 404 实际 404
── B 组【守卫】:合法入口一个都不许被误伤 ──
✅ Index/index(前台首页) → 200 实际 200
✅ Login/adminlogin(后台登录页) → 200 实际 200
✅ Pubsite/verify(图形验证码) → 200 实际 200
✅ Admin/index(后台首页) → 200 实际 200
✅ Index/index 真的渲染了 HTML(非空壳 200) body 31182 字节
── C 组【守卫】:这些路径仍然「没有」,且落点仍是 LegacyFallback ──
✅ Login/zzz_no_such_action → 404 且落点 Login->zzz_no_such_action 实际 404 diag="app\controller\Login->zzz_no_such_action"
✅ User/zzz_no_such_action → 404 且落点 User->zzz_no_such_action 实际 404 diag="app\controller\User->zzz_no_such_action"
✅ Flash/zzz_no_such_action → 404 且落点 Flash->zzz_no_such_action 实际 404 diag="app\controller\Flash->zzz_no_such_action"
✅ Order/zzz_no_such_action → 404 且落点 Order->zzz_no_such_action 实际 404 diag="app\controller\Order->zzz_no_such_action"
✅ Pay/zzz_no_such_action(薄墓碑类,仍 410) → 410 实际 410
✅ Pay/__call(薄墓碑类,改前 500) → 410 实际 410
✅ WxPay/__call(薄墓碑类) → 410 实际 410
✅ Oauth/auth_check_session(SEC-0013 已删除) → 404 实际 404
✅ Oauth/auth_check_session 响应体不含 session_key / openid body={"error":"not_found"}
✅ Oauth/getsortServerName(零调用方死代码,已删) → 404 实际 404
── D 组【守卫】:改造前就安全的路径没被改坏 ──
✅ AI/_normalizeI2iSize(类无 __call,一直 404) → 404 实际 404
✅ Admin/_referralEmptyBuckets(Admin 集中闸) → 404 实际 404
✅ Verify/zzz_no_such_action(无 __call → 框架 404) 实际 404 diag="method not exists:app\controller\Verify->zzz_no_such_action()"
── E 组【守卫】:跨 controller app()->make() 不被误拒 ──
✅ action=initialize 的上下文里 make(PayV2) 仍成功 实际 "MAKE_OK"
── F 组【2026-09-12 收敛的核心判据】:不同来源的 404 对外逐字节相同 ──
❌ 浏览器(text/html) 车道:4 条不同来源 body 全等 LegacyFallback __call=c578522561fb91e9 框架 404=c578522561fb91e9 empty_controller=Error=c578522561fb91e9 Taro H5 产物缺失(静态路径)=3634ac923a95db59
❌ 机器(*/*) 车道:4 条不同来源 body 全等 LegacyFallback __call=d2dfdc9511fbeaa0 框架 404=d2dfdc9511fbeaa0 empty_controller=Error=d2dfdc9511fbeaa0 Taro H5 产物缺失(静态路径)=3634ac923a95db59
✅ 404 页不含「TP8」 页面 2666 字节
✅ 404 页不含「旧栈」 页面 2666 字节
✅ 404 页不含「retired」 页面 2666 字节
✅ 404 页不含「未迁移」 页面 2666 字节
✅ 404 页不含「think\」 页面 2666 字节
✅ 404 页不含「/var/www」 页面 2666 字节
❌ 404 页确实是给人看的页面(不是一行 JSON) 页面 2666 字节
❌ 404 响应带 Cache-Control: no-store 实际 ""
========================================================
PASS 43 FAIL 4