Skip to content

v3.1.1

Choose a tag to compare

@pollybird pollybird released this 12 Oct 15:51
· 9 commits to main since this release

安全修复版本

安全修复版本(GitCode issue #1 高危项 H1 + H2)。API 鉴权改为默认拒绝(fail-closed),全站引入 CSRF 同步 Token 校验。无数据库结构变更、无新增 Python 依赖。

Fixed

  • API 默认免鉴权(H1,高危):内容 API 静态令牌校验此前在「未配置令牌」时匿名放行,而默认安装 api_token 为空,导致 /api/v1/* 全部端点可被任意匿名读取。现改为 fail-closed:未配置令牌时一律返回 401(提示到后台「内容 API」生成),配置令牌后校验 X-API-Token(恒时比较)。
  • 全站缺失 CSRF Token(H2,高危):新增 CSRF 同步 Token 机制(app/utils/csrf.py):Token 与用户 Session 绑定,POST/PUT/PATCH/DELETE 强制恒时比较校验,未携带/错误返回 403;前后台所有模板注入 <meta name="csrf-token"> 与自动提交捕获脚本(表单隐藏字段 + jQuery 请求头自动附加);手写 fetch/XHR(Word 导入、CKEditor 上传、页面构建器、一键翻译)逐处补齐 X-CSRF-Token;/api/* 与 /healthz 豁免;与既有 Origin/Referer 同源校验互为纵深。

Changed / 升级注意

  • 使用内容 API 的站点升级后必须在后台「内容 API」生成令牌并以 X-API-Token 请求头携带,否则返回 401(详见 UPGRADE.md)。
  • 测试:新增 CSRF 防护 9 项、API fail-closed 5 项、迁移索引收口 4 项、删除确认验证码 3 项、审计清理 4 项用例,全量 320 项通过。

追加修复(v3.1.1 发布当日补丁,tag 已更新至包含全部修复)

  • 后台无法登录(403 CSRF):login.html / setup.html 为不继承后台 base 的独立模板,缺少 csrf meta 与注入脚本——首次提交(验证码/密码输错)生成 Session Token 后,第二次提交必然 403。已为两个独立模板补齐 Token 渲染。
  • 数据库迁移插件报 1709 索引超限:老版 MySQL(5.6/Antelope 或 innodb_large_prefix=OFF)单列索引前缀上限 767 字节,utf8mb4 下 String(N) 的 N>191 建索引即报错。迁移建表前统一把超限的索引/唯一列降到 191 字符,一次覆盖全部业务表与插件表。
  • 删除主题 / 卸载插件必失败:确认弹窗此前未渲染验证码图片与输入框,提交必报「验证码已过期」。两个弹窗已补齐验证码 UI,每次打开或点击图片均重新取码。
  • 审计日志清理范围失效:前端 days 与后端 keep_days 字段名错位,所选清理范围被无视、永远按默认 90 天清理,「清空全部」从未生效。已对齐字段并支持 days=0 清空全部。
    完整说明见 CHANGELOG.md 与 UPGRADE.md。