WeKan 2026 年 3 月版本复盘(v8.35–v8.49):Meteor 3.4 升级、IntegrationBleed 安全修复与卡片 Excel 导出

WeKan 2026 年 3 月版本复盘(v8.35–v8.49):Meteor 3.4 升级、IntegrationBleed 安全修复与卡片 Excel 导出

【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan

本文基于 WeKan 仓库中归档的 2026 年 3 月发布记录,完整梳理该月 15 个版本(v8.35 至 v8.49)的发布内容,并结合仓库当前源码与配置,深入讲解其中的四条主线:Meteor 3.4 / Node.js 22.22 / MongoDB 7.x 运行时升级、IntegrationBleed 与 RebindBleed 严重安全问题的修复机制、卡片导出 Excel 新功能的落地路径,以及附件与头像存储迁移到WRITABLE_PATH/files/下的目录结构变化。读完本文,你可以理解 WeKan 在这个月完成了哪些关键升级与修复,并在当前仓库中找到对应的实现代码作为验证依据。

本月份发布概览

这份记录由 CHANGELOG.md 拆分而来(对应 wekan/wekan#6580 的动机:让主 CHANGELOG 文件保持足够小以便直接打开)。按原文档的说法,版本小节是"发布记录",拆分前后读法完全一致。2026 年 3 月的发布节奏如下:

2026-03发布数
05 日1
20 日2
21 日3
23 日2
27 日1
30 日1
31 日5

从分布可以看出,这个月的发布集中在 3 月 21 日与 3 月 31 日两个峰值,其中 3 月 31 日一天发布了 5 个版本(v8.45–v8.49),主要对应发布脚本与 Docker/Snap 打包链路的连续修复。

主线一:v8.43 升级至 Meteor 3.4、Node.js 22.22 与 MongoDB 7.x

v8.43(2026-03-27)是这个月最重要的运行时升级版本,其变更包括:

  • 升级至 Meteor 3.4、Node.js 22.22、MongoDB 7.x(由 harryadel 与 xet7 贡献);
  • 升级 npm 包@wekanteam/exceljs的依赖;
  • 升级@meteorjs/rspack(Meteor 官方团队贡献);
  • 更新build.sh以适配 macOS 26.4,并修复build.sh无法正确构建 WeKan 的问题;
  • 将 Meteor 3 迁移文档移动到docs/Upgrade/目录;
  • 多项依赖升级与发布脚本更新。

该版本同时修复了一批功能性问题:

  • 卡片导出 Excel(Part 3)并顺带修复了附件上传问题;
  • 移除临时调试日志;
  • 修复泳道(Swimlane)、列表(List)和卡片(Card)"设置颜色"功能失效的问题;
  • 修复工作区设置弹窗内容溢出(overflow)的问题;
  • 修复剪贴板上传附件时重命名失败、并保持扩展名元数据同步的问题;
  • 修复卡片操作弹窗溢出、列表操作弹窗滚动的问题;
  • 修复搜索功能:在 ReactiveCache 与搜索发布(publications)中保护异步方法,避免竞态;
  • 其他拼写修正等。

在仓库中可以找到对应的佐证:

  • docs/Upgrade/METEOR3_MIGRATION.md 记录了 WeKan 从 Meteor 2.16 向 Meteor 3 迁移的完整模式与约束(同步findOne迁移到findOneAsync等),这正是 v8.43 中将迁移文档归档到docs/Upgrade/的那份文档,当前位于 docs/Upgrade/ 目录下;
  • package.json 中当前依赖@meteorjs/rspack版本为^2.2.0、@meteorjs/reify为^0.25.4,说明 Meteor 3 工具链(rspack 打包、reify 模块系统)已是项目的正式构建基座;
  • 搜索相关的异步防护改动对应服务端ReactiveCache与搜索 publications 的调用链,客户端侧缓存实现见 imports/reactiveCache.js。

主线二:v8.35 / v8.36 修复 IntegrationBleed 严重安全问题

本月有两次被明确标注为"CRITICAL SECURITY ISSUES"的发布:

  • v8.35(2026-03-05):修复 IntegrationBleed。这是本月唯一的发布,由 Rodolphe GHIO 与 xet7 贡献。同版本还包含:konecty:mongo-counter与templates:tabs包被内联实现替代(Meteor 3 迁移的准备工作)、dompurify升级、注释掉管理面板/设置/迁移相关菜单选项以加速 WeKan、优化看板加载、修复 FilesCollection 中 Avatar 与 Attachment 的findOneAsync错误、修复头像无法删除等问题,以及多项 dependabot 依赖升级(minimatch3.1.3→3.1.5、actions/download-artifact7→8、meteorengineer/setup-meteor2→3、actions/upload-artifact6→7)。
  • v8.36(2026-03-20):修复 IntegrationBleed 的 RebindBleed 变体(由 Rodolphe GHIO 与 xet7 贡献)。

当前仓库中 server/lib/ssrfGuard.js 正是这一系列安全加固的实现核心。从源码注释可以确认其防护模型:

  1. 通过dns.lookup({ all: true })解析双地址族(A 与 AAAA 记录)——源码特别指出,此前只解析 A 记录的实现留下了漏洞面;
  2. 将 TCP 连接固定(pinning)到首次解析出的 IP,杜绝二次 DNS 查询,从而把 DNS-rebinding 时间窗口压到零("rebinding window = 0");
  3. 作为fetch的替换实现,仅使用 Node.js 内建模块(http、https、dns、net)。

RebindBleed正是针对"首次校验 DNS 解析结果与第二次实际建连使用不同结果"这一攻击路径的命名,ssrfGuard 的"解析即固定"策略正是对该攻击面的直接封堵。该模块的使用场景(SSRF 防护清单)在 docs/Security/Remediation/WeKan.md 中也有对应条目:ssrfGuard.fetchSafe被应用于附件 URL 校验、头像本地化、Trello API 导入与出站 webhook 等场景。

v8.36 还包含大量功能修复,值得单独列出:

  • 新增:完成泳道、列表和卡片的"复制与移动"剩余功能(该功能跨版本推进);
  • 修复关联卡片(linked card)的泳道路由;
  • 将不兼容的file-type替换为mime-type;
  • 修复新建看板后"添加列表"弹窗误弹出、以及列表为空时的误弹出;
  • 改进全局搜索相关性并新增精确字段操作符;
  • 修复列表"添加卡片"操作与排序持久化;
  • 修复版本号不可见、列表拖拽把手缺失;
  • 修复读取默认文件.well-known/assetlinks.json.default报错(Android App Links 相关);
  • 修复已打开卡片无法关闭的问题;
  • 移除列表头部顶部空白;"Add Rule"与"Back"按钮颜色由黑色改为主题色,以及更多 Rules 按钮样式修复;
  • 修复 IFTTT 规则归档卡片后的崩溃(此时归档区尚未显示该卡片),并让"在列表后添加"只显示当前泳道内的列表;
  • 修复注册新用户在注册页崩溃的问题;
  • 修复"在所选列表后添加"的行为,并为"归档列表"和"归档泳道"增加确认弹窗;
  • 修复归档卡片/列表/泳道的查看、恢复与删除逻辑(删除列表时不会误删该列表中先于归档列表被归档的卡片);
  • 修复检查清单(checklist)与检查清单项的增删,以及项翻译未生效的问题;
  • 修复新增标签并选择颜色时颜色未打勾、选错颜色的问题;
  • 修复复制卡片与移动卡片功能;
  • 依赖与清理:docker/build-push-action6.19.2→7.0.0、docker/metadata-action5.10.0→6.0.0、docker/login-action3.7.0→4.0.0、移除peerlibrary:blaze-components、移除raix:handlebar-helpers并用原生 Blaze helpers 替代、用原生 JavaScript 工具替代underscore、两次flatted升级、Snap Candidate 与 Helm Chart 均升级至 MongoDB 7.0.31。

主线三:v8.40–v8.43 卡片导出 Excel 功能落地

"Export Card to Excel"分三个版本推进,是 3 月新增功能中迭代最完整的一项:

  1. v8.40(2026-03-21):Export Card to Excel and related fixes. Part 1;
  2. v8.41(2026-03-23):Part 2,同版本还包含 Meteor 3 迁移配套改动(见下文);
  3. v8.43(2026-03-27):Part 3,并顺带修复附件上传问题。

当前仓库中该功能的实现位于 models/exportExcelCard.js。从源码可以看到:

  • REST 端点为/api/boards/:boardId/lists/:listId/cards/:cardId/exportExcel,支持authToken鉴权;
  • 注释明确其设计目标:将单张卡片导出为DIN A4 纵向打印格式的 .xlsx 文件;
  • 核心导出逻辑委托给models/server/ExporterExcelCard,支持按字段(ALL_FIELDS)、日期格式与时区参数化。

配合 package.json 中的@wekanteam/exceljs ^4.7.3(WeKan 维护的 exceljs 分支)依赖,可以确认该功能的技术栈。相关测试覆盖见 tests/exportExcelCardContainment.test.cjs 与 tests/chartExcelDateCells.test.cjs。

主线四:Meteor 3 迁移的配套清理(v8.35 / v8.36 / v8.41)

v8.43 之前,3 月还陆续合入了多项为 Meteor 3 铺路的代码清理,均出自 Meteor 团队成员 harryadel:

版本清理项说明
v8.35内联konecty:mongo-counter去掉第三方计数器包
v8.35内联templates:tabs用原生 Blaze 实现替代
v8.36移除peerlibrary:blaze-components减少 Blaze 组件依赖
v8.36移除raix:handlebar-helpers改用原生 Blaze helpers
v8.36移除underscore改用原生 JavaScript 工具
v8.41用 communitypackages 替代useraccounts系列账号体系包迁移
v8.41移除未使用的meteorhacks:aggregateMeteor 3.0 迁移清理
v8.41Email.send替换为Email.sendAsync适配 Meteor 3 异步邮件 API

这些清理与 docs/Upgrade/METEOR3_MIGRATION.md 中记录的"双兼容"策略(改动须同时兼容 Meteor 2.16 与未来的 3.x 工具链)一脉相承,最终在 v8.43 收口为 Meteor 3.4 的正式升级。

主线五:v8.47 附件与头像路径迁移到 WRITABLE_PATH

v8.47(2026-03-31)将附件(attachments)与头像(avatars)的存储路径统一调整为WRITABLE_PATH/files/attachments、WRITABLE_PATH/files/avatars等。仓库中的文档印证了这一目录约定:

  • docs/Design/Autoupdate/UCS.md 说明自更新流程会在WRITABLE_PATH下维护files/attachments/与files/avatars/两个目录并重写对应路径字段;遗留的 GridFS 二进制会被迁移脚本(migrate-gridfs-to-fs.mjs,依赖WRITABLE_PATH)搬到这两个目录;
  • docs/Features/ImportExport/Attachment/AttachmentBackwardCompatibility.md 说明旧版附件下载 URL(/cfs/files/attachments/:id)仍可通过遗留路由继续工作,保证向后兼容。

主线六:v8.44–v8.49 发布链路的连续修复与数据库回退

3 月 30–31 日的 6 个版本集中处理发布工具链与打包问题:

  • v8.44(2026-03-30):从 v8.43 的 FerretDB/PostgreSQL 组合回退到 MongoDB 7.x;依赖升级;发布脚本更新;修复 globalSearch(snowsky 贡献);修复 myCards 页面崩溃(cristomoya 贡献);并附带一个值得注意的改进——"始终显示全部数据而无需迁移",例如 Shared Lists 之前是 Per-Swimlanes lists、孤立的 Swimlanes/Lists/Cards 等数据,现在无需执行迁移即可正确展示。
  • v8.45(2026-03-31):发布脚本更新(7 个部分);GitHub Actions 更新(10 个部分,dependabot);Snap 修复尝试(10 个部分)。
  • v8.46(2026-03-31):发布脚本更新(2 个部分);docker-compose.yml从 FerretDB/PostgreSQL 改为 MongoDB。
  • v8.47(2026-03-31):附件与头像路径迁移(见主线五)。
  • v8.48(2026-03-31):发布脚本更新(2 个部分)。
  • v8.49(2026-03-31):修复缺失模块@meteorjs/reify/lib/runtime(mzch 与 kovacs-andras 贡献);修复docker-compose.yml;尝试修复 Snap(xet7 贡献)。

对照仓库当前状态可以观察到两点:其一,package.json 中的@meteorjs/reify(^0.25.4)依赖与 v8.49 修复的"缺失模块 @meteorjs/reify/lib/runtime"直接相关,该修复保证了 Meteor 3 工具链下 reify 运行时模块可被正确解析;其二,仓库根目录现提供了一整套 compose 文件覆盖不同数据库后端:docker-compose.yml(默认,FerretDB v1 + 内嵌 SQLite)、docker-compose-ferretdb-v1-postgresql.yml、docker-compose-ferretdb-v1-mysql.yml、docker-compose-ferretdb-v1-mariadb.yml、docker-compose-ferretdb-v1-sap-hana.yml、docker-compose-ferretdb-v2-postgresql.yml、docker-compose-mongodb-v7.yml 与 docker-compose-multitenancy.yml。v8.44/v8.46 期间"MongoDB ↔ FerretDB"的往返调整,反映的是项目在这两个月里对默认数据库形态的持续校准。

其余版本要点补全

为保证记录完整,将剩余版本的关键内容补全如下:

  • v8.37(2026-03-20):修复"卡片保存不生效"的问题(comunidadplayasdetijuana、Janfy 与 xet7 贡献)。
  • v8.38(2026-03-21):更新CONTRIBUTING.md与SECURITY.md(后者 6 个部分);修复"用户列表为空、部分翻译不可见、组织/团队/人员计数错误、部分按钮主题色错误、新建组织/团队应位于最左列"等一系列问题。
  • v8.39(2026-03-21):新增**删除工作区(workspace)与工作区设置(Workspace Settings)**功能(mimZD 与 xet7 贡献,2 个部分);修复管理面板 People 页面"从任意按钮位置打开锁定弹窗"的定位问题。
  • v8.41(2026-03-23):除 Excel 导出 Part 2 与 Meteor 3 清理外,还修复了三个功能缺陷——连续新建第二张卡片时应为空标题(不应带上第一张卡片的文字)、列表视图中拖拽后卡片消失(pull/6199,KhaoulaMaleh 贡献)、看板丢失成员列表或权限的问题(marylinereumont、AymenHassini19、muabila 与 xet7 贡献)。
  • v8.42(2026-03-23):修复 SSO 登录损坏的问题(sbaecker、vladimirdulov 与 xet7 贡献)。

小结:这个月 WeKan 在工程上做了什么

按时间线串联,2026 年 3 月的 WeKan 呈现清晰的"先固安全、再迁运行时、后铺功能"的节奏:

  1. 3 月上旬(v8.35):修复 IntegrationBleed 严重安全问题,同时用内联实现替换两个第三方包,为去依赖化起步;
  2. 3 月中下旬(v8.36–v8.42):封堵 RebindBleed 变体(其防护实现沉淀在 server/lib/ssrfGuard.js),完成泳道/列表/卡片复制与移动的收尾,Excel 卡片导出分两批落地,SSO、卡片保存、成员权限等基础功能缺陷集中修复;
  3. 3 月末(v8.43–v8.49):正式升级 Meteor 3.4 / Node.js 22.22 / MongoDB 7.x 并归档迁移文档,附件与头像路径统一到WRITABLE_PATH/files/下,随后一天内连发 5 个版本修复发布脚本、Docker Compose 与 Snap 打包链路。

对需要升级的部署方,适用前提提示如下:v8.43 起运行时基线为 Meteor 3.4 + Node.js 22.22 + MongoDB 7.x;数据库默认形态在 v8.44 与 v8.46 之间发生 MongoDB ↔ FerretDB 的切换,升级时应以对应版本附带的docker-compose*.yml为准;使用 Docker/Snap 部署的用户建议直接跳到 v8.49 以获得完整的打包修复。

【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考