表单模块的安全公告只覆盖两段版本区间,站点是先升级还是先关提交功能
Drupal 社区里一条 Webform 模块的安全公告把受影响版本写成两段区间:低于某个次版本,以及新主分支里某个范围之内的版本;修复版本相应是 6.2.12 与 6.3.1。站点是先升级还是先关提交功能,取决于自己走哪条分支,以及升级能不能立刻做完。
两段区间说明的是分支并行维护
公告原文的影响范围写作「低于 6.2.12」以及「不低于 6.3.0 且低于 6.3.1」,修复版本相应是 6.2.12 与 6.3.1。两条并列意味着同一模块在两条分支上都被支持,处在任一条上的站点都有对应目标版本。
判断顺序因此是三步:读取当前模块的准确版本;确认它属于哪条分支;按该分支给出的修复版本升级。跨分支选择修复版本会带来额外变更面,不是应急时的优先选项。
| 情形 | 版本位置 | 建议动作 |
|---|---|---|
| 已在受影响分支且有修复版本可升 | 低于该分支修复版 | 直接升级到对应修复版本 |
| 升级需要等依赖验证 | 在受影响区间内 | 先收窄对外提交入口,再排升级 |
| 不在任一受影响区间 | 区间之外 | 记录核对结果,不需要额外动作 |
| 分支已停止支持 | 老分支 | 优先规划迁移,而不是单独打补丁 |
问题出在模板替换,不在字段校验
公告描述的原因是没有把特定格式模板排除在令牌替换之外,风险级别被评为严重。这类问题的触发路径不经过表单字段校验,而是在内容被组装时执行了不该执行的替换,因此调整字段规则、增加校验都碰不到它。
站内已有的内容层防护在这里也不重叠:针对 SQL 注入与 XSS 的过滤、敏感词过滤与内容审核处理的是提交内容的表达形式,不负责模板替换的边界。把「我们已经过滤了提交内容」当成缓解措施,是这类公告最常见的误读。
先升级还是先关提交
顺序由两个因素决定:升级的实际耗时,以及这个表单在站上的暴露程度。
能在一个维护窗口内完成升级的,直接升级并保留回退备份,这是成本最低的路径。若升级牵涉依赖改动、需要走测试流程,就先收窄入口:把对外提交的表单暂时下线或改为只接受登录用户提交,同时记录哪些页面受影响、恢复条件是什么。这一步要留书面记录,否则恢复业务时容易漏开。
两条路径都不能省略的事后动作是:升级完成后核对模块版本号是否与公告的修复版本一致,再验证一次提交流程与模板渲染的页面。只看整体系统版本号没有意义,模块级修复经常不动主程序版本。
常见问题
问:评级严重但利用条件写的是理论可能,可以缓一缓吗? 答:缓不缓取决于入口是否对外。对外可提交的表单在风险未消除期间应至少收窄入口,而不是按评级排值班。
问:只关掉某个表单页面够吗? 答:要看提交是否还有接口路径。页面关掉但接口仍可调用的情况很常见,应按调用入口逐个确认。
问:升级到新主分支算不算处置完成? 答:只有落到公告指定的修复版本才算完成。跨分支升级会引入其他变更,应急阶段优先选当前分支的修复版本。