Skip to content

v23.2.0 — 加固批:CORS 安全修复 + 测试基建恢复

Choose a tag to compare

@lza6 lza6 released this 14 Oct 13:29
· 40 commits to main since this release

v23.2.0 — 加固批

本批以「终局审计 + 真实缺陷修复 + 验收能力补齐」为主题。核心是一条安全修复:
CORS 白名单从未生效。

🔒 安全修复

  • IF_CORS_ORIGINS 环境变量静默失效。api/main.py 挂载 CORSMiddleware 时读
    config.CORS_ORIGINS,而该值来自 constants.py 中一行硬编码字面量 "*"。
    Settings.__init__ 里的 global CORS_ORIGINS 拆包后只写 settings_core
    命名空间,与包命名空间不是同一个变量 —— 环境变量始终无效,主链路恒为
    allow_origins=["*"]。
    • 实测验证:白名单内 Origin 放行、白名单外无 access-control-allow-origin 头
    • 成因判定:既有缺陷,非本次拆分引入(旧版同样被模块级字面量覆盖)
    • 配 5 个回归测试锁死

🧪 测试基建恢复

  • 前端 vitest 此前完全不可用:npm test 输出 0 tests / 28 errors。根因是
    vitest 4 隔离 worker 在非 ASCII 路径(2api目录)下启动超时。
    → isolate:false + pool:'forks' + testTimeout:20000,现 28 files / 299 tests 全绿
  • 修 2 处测试失败:
    • test_http_pool_config::test_env_overrides —— config 拆包引入的真回归
      (importlib.reload 不重执行子模块 constants)
    • test_mcp_server::test_tools_list_whitelist —— 白名单停在 v16,未同步
      v18 P1-3 新增的 2 个工具
  • ruff 基线 27 → 0(含一处真缺陷 F821 Undefined name ModuleType)
  • 记录了本仓 pytest 失败详情被 conftest 的 os._exit 截断这一隐蔽问题

🎨 用户可见修复

  • 门户画廊错误文案泄漏:原本把 Unexpected token '<', "<!DOCTYPE "... 直接渲染给用户
    → 按失败类型归类中文文案
  • 管理端 topbar 375px 文字重叠、聊天页动作按钮组 375px 溢出

📋 验收能力补齐

  • 移动端 E2E 真跑通(此前脚本默认连 4590 但仓库无任何服务提供该端口,从未跑过)
    → 新增 scripts/serve_static.cjs,补 /admin 与深链回退路径
  • 压测复验:1→200 并发共 750/750 成功、0 个 5xx、进程存活;
    压力释放后延迟 1 次请求内回落(无连接池耗尽/内存泄漏残留)
  • 全量测试:2521+ passed / 0 failed

⚠️ 已知遗留(非本批引入)

  • test_skill_sediment.py 在特定文件组合下 teardown 报 attached to a different loop
    (跨文件事件循环污染)。已用实验证明与本批改动无关。

完整变更

6 主题提交 + 版本 bump,详见仓库 docs/2026-10-14-hardening-report.html(含 14 题测验)
与 workflow_status.md。