JianFeeeee
cd108f8093
fix(admin): requireToken 去掉 fail-open 死分支,空 expected 一律拒绝
审计第 1 条的「另一半」。第 1 步把 history-server 的 requireToken 改成了
fail-closed,但 admin-server 的同类函数还留着原来的形状:
if expected == "" {
return true // 未配置 token 则不校验
}
它今天打不到(唯一调用点 requireAdminToken 开头有 adminToken != "" 守卫),
但形状本身就是风险:任何人新写一行 requireToken(w, r, someOptionalToken)
就会把 fail-open 复活,且没有任何测试会报红 —— 第 1 步的静态护栏只钉了
history-server 一半仓库。
现在 admin-server 的 requireToken 与 history-server 完全对齐:
- expected 为空 → 401 + JSON {"error": "...set NAVI_ADMIN_TOKEN / NAVI_SYNC_TOKEN..."},
绝不 return true;拒绝信息带修复指引(全站 401 时运维最需要的就是这句),
且不回显任何 token 值。
- 「没有 token 也允许访问」的决策只允许出现在明确语义的函数里
(requireAdminToken 的 allowUnauthenticated 分支),不再藏在通用校验函数里。
requireAdminToken 的三段判定顺序一行未动:
① 配了 adminToken → requireToken;② 未配 + allowUnauthenticated → 放行;
③ 其它 → 拒绝。security_test.go 的既有用例(TestAdminAPIFailsClosedByDefault、
TestAdminAPIRejectsWithoutTokenEvenIfFlagUnset 等)全部继续绿。
新增 admin-server/token_failclosed_test.go:
1. 直接调 requireToken(rec, req, "") 的四种请求形态 → 全部 false + 401 +
JSON + 含修复指引 + 不回显 token;
2. 配了 token 时正常路径不变(无头/错 token/缺 Bearer 前缀/对 token),
外加逐条断言 requireAdminToken 的三段顺序(含「配了 token 时不因
allowUnauthenticated 而放行错误 token」这条最容易改坏的);
3. 静态护栏:admin-server 的 main.go / gateway.go / security_test.go 都不得再出现
「未配置 token 则不校验」或 `expected == "" { return true`,并正向断言
requireToken 函数体里有 StatusUnauthorized。
反向验证:把空 expected 分支改回 `return true` 后,
TestRequireTokenRejectsEmptyExpected(4 个子用例全红)与
TestNoFailOpenShortCircuitAcrossServers 报红;恢复后 admin-server 全集 ok。
2026-10-22 23:27:51 +08:00
..
2026-09-11 23:14:45 +08:00
2026-10-03 08:45:47 +08:00
2026-09-12 10:10:52 +08:00
2026-09-11 22:00:09 +08:00
2026-09-12 08:32:03 +08:00
2026-09-13 08:58:41 +08:00
2026-10-22 23:14:32 +08:00
2026-10-22 23:14:32 +08:00
2026-09-08 22:25:00 +08:00
2026-09-08 22:25:00 +08:00
2026-10-22 14:08:06 +08:00
2026-10-02 11:24:55 +08:00
2026-10-22 23:27:51 +08:00
2026-09-12 10:19:22 +08:00
2026-09-13 07:56:38 +08:00
2026-09-11 22:00:09 +08:00
2026-09-13 07:56:38 +08:00
2026-10-22 14:08:06 +08:00
2026-10-22 23:27:51 +08:00
2026-10-02 11:24:55 +08:00