feat(gateway): 安全收口 —— CORS 生产收紧 + 限流按用户(T4.F)

- CORS:开发期缺省仍放行 *(便利);生产(APP_ENV=prod/GIN_MODE=release)未显式配
  CORS_ALLOW_ORIGIN 则不发 ACAO 头(浏览器按同源拦截),逼运维显式配置允许的源
- 限流键改「已认证按 uid、未认证按 IP」:企业网多人共享出口 IP 不再互相拖累,
  单用户换 IP 也绕不过;中间件顺序调整 Auth 前置于 RateLimit(否则取不到 uid)
- isProd() 判定与 middleware.RequireAdmin 同口径
- live 冒烟:登录/认证请求正常(重排未破链),dev CORS 仍 *

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Blizzard
2026-07-02 13:55:20 +08:00
parent 6095bc71d2
commit 23b8fa5e8a
3 changed files with 43 additions and 16 deletions
+4 -1
View File
@@ -196,7 +196,10 @@ RBAC 未做,暂以单管理员账号代理;概览口径必须是**系统级*
- [ ] KB 级联删事务化(kb.go:172 三库删一半失败仍删 PG → 不一致)| M
- [ ] 预算硬顶兜底(budget.go ≤0 即无限,单任务可无限烧)| M
- [ ] 审批 checkpoint 落盘失败重试(compose_compiler.go:323 现只 log → 任务永卡 waiting| M
- [ ] 安全:CORS 缺省去 `*`、限流按登录用户(非纯 IP)、`X-Session-ID` 防伪、开发 JWT 密钥外置、输入校验补强 | S×N
- [~] 安全收口(部分):
- [x] CORS 生产默认收紧 ✅ —— 开发期缺省仍 `*`(便利);生产(APP_ENV=prod/GIN_MODE=release)未显式配 CORS_ALLOW_ORIGIN 则**不发 ACAO 头**(浏览器同源拦截),逼显式配置。
- [x] 限流按登录用户 ✅ —— RateLimit 键改「已认证按 uid、未认证按 IP」;middleware 顺序 Auth 前置于 RateLimit。live 冒烟通过(登录/认证请求正常,dev CORS 仍 *)。
- [ ] `X-Session-ID` 防伪 / 开发 JWT 密钥外置 / 输入校验补强 | S(待)
- [ ] 性能:ListModels 去 O(N²)admin.go:48)、KB/Agent 列表分页、报告分章检索缓存、Milvus 批量 ensure | S~M
- [ ] 可观测:panic 进 trace span + 回写通知、TTFT/token-s/各路检索耗时指标 | M
- [ ] 配置化:切块大小 / history 轮数 / 各并发度 收口为统一可配 | S