公式渲染模块被判跨站脚本,富文本过滤为什么要连渲染路径一起查

📅 2026-10-11 👁️ 0

Drupal 社区公告 SA-CONTRIB-2026-195 把 MathJax 模块判为 Critical 级跨站脚本,漏洞不在 HTML 标签而在公式渲染路径:该模块对格式化的 TeX 内容里的 JavaScript 未做转义,4.1.2 之前的版本受影响。这类公告给出的提醒是明确的——富文本过滤必须连渲染路径一起查。标签白名单只约束走 HTML 解析的出口,公式、Markdown、图表这些各自解释文本的引擎在它的管辖之外。

公告里的版本区间和评级怎么读

读三条:受影响区间是 4.1.2 之前,修复方式是升级到 4.1.2;评级 15 / 25,攻击条件标注为基本(AC:Basic),意思是触发不需要特殊配置或高权限前提;机密性与完整性影响都非零,说明利用成功后能改写页面行为。对运维来说优先动作的顺序也由这三条决定:先确认装没装该模块,再确认版本是否落在区间内,最后才是评估临时缓解。不要只看「严重」二字就恐慌,也不要因为需要特定组件就轻视——只要站点确实在用这个渲染路径,未转义就是实打实的执行入口。

为什么白名单管不到渲染路径

网站里常见的非 HTML 解析器有三类:公式引擎按 TeX 语法解释花括号与命令,Markdown 解析器把标记文本编译成 HTML,图表配置把结构化文本渲染成可交互组件。它们的共同点是自己定义「什么算指令」。输入侧的过滤往往只拦尖括号这类 HTML 特征,而公式引擎识别的语法根本不依赖尖括号——同一段内容,HTML 解析器看到的是文字,公式引擎看到的是指令。标签白名单再完整,也管不了第二个解释器眼里的世界。这就是「过滤做了、渲染路径没查」的典型缺口。

输出上下文转义分几种

原则是:由消费者决定转义方式,而不是由数据来源决定。同一段用户文本,输出进 HTML 正文要处理尖括号与引号;输出进属性值要多防一层分隔符;输出进脚本字符串要按 JavaScript 的语法转义;拼进 URL 查询参数则要做百分号编码。四种上下文的不安全字符集合各不相同,只做一个全局「敏感字符清洗」必然两头不讨好:拦多了显示异常,拦少了留下逃逸路径。自查清单按出口枚举:把富文本能到达的每个模板位与渲染组件列出来,逐一问「这个位置的解释器是什么,它收到过转义吗」。

站内富文本该在哪几处收口

收口分三层:输入层做标签白名单与敏感词过滤、关键词替换,AnQiCMS 的内容安全设置管的正是这一段;防御层针对 XSS 与 SQL 注入的攻击特征做拦截,AnQiCMS 在认证与输入防护上有对应设计;渲染层则是上面说的按输出上下文转义,这层通常要配合模板与组件逐一核对,任何带独立解析引擎的富文本扩展都应当纳入审计。三层各司其职,公告里那种「输入过滤完好、渲染路径裸奔」的事故,查的正是第三层有没有人负责。

常见问题

只用官方富文本编辑器还会出这类问题吗? 会。官方编辑器负责输入与显示,第三方渲染组件(公式、代码高亮、图表)常常自带解析器,审计范围要覆盖它们而不是只盯编辑器本身。

升级修复不了的时候有什么临时办法? 缩小暴露面:对不可信来源的内容关闭公式与非 HTML 渲染,或把这些内容降级为纯文本展示,等官方修复版本就绪再恢复。

怎么确认自己的站有没有这条渲染路径? 把前台页面加载的脚本与渲染组件清单拉出来,逐个确认它是否会解释用户可编辑内容。只要答案含「会」,它就在必查范围里。

相关文章

更新记录写的是上传扩展名黑名单没枚举全,靠黑名单挡上传为什么会漏

黑名单必须提前枚举所有恶意扩展名写法,新后缀变体、双重扩展名、大小写与编码变形都可能绕过不完整的枚举,同类系统PbootCMS的V3.2.16更新记录正记录了这类修复。本文给出扩展名白名单、内容类型核验与上传目录执行权限三层收口的做法,以及部署阶段要同步完成的一件事。

2026-10-11

统计说用 PHP 的网站约占七成,PHP 8 占其中约六成五,这两个数怎么用

W3Techs 2026年10月11日统计显示已知服务端语言的网站中69.7%使用PHP,PHP使用者中64.6%已在版本8。本文解释这两个数的口径与读法,并给出从生态、运行成本、部署形态与升级负担四项比较建站方案的框架,避免把部署占比直接当成技术结论。

2026-10-11

有论文指出生成式优化带来两类风险,内容站自查该看哪两处

有立场论文提醒,生成式引擎优化的风险落在引擎侧而非内容侧:一边是可见度更容易集中到少数来源,一边是未披露的商业影响可能混进证据与推理。站点能自查的是两处——谁在替你的页面说话,以及答案里有没有没交代的影响来源。

2026-10-11

新链接即时通知搜索引擎的机制,支持名单里现在有哪几家

除了提交站点地图,还有一类即时通知机制把新增、更新或删除的链接直接告诉参与的引擎。它的支持名单以官网为准,名单外的引擎仍走各自通道。对中文站来说,站点地图负责全量、主动推送负责增量,把新链接尽快交到对的引擎手里比反复提交更实际。

2026-10-11

政府门户和营销型官网选内容管理系统,看的能力项有什么不同

政府门户网站选内容管理系统优先看内容审核、敏感词过滤与用户组权限,营销型官网更看重关键词库、锚文本与表单的人机验证;robots配置与站点地图生成则是两类站点共用的底座。本文按约束差异拆开能力项,给出同一系统内两种配置取向,帮助按站点性质而不是按功能清单长短做选型。

2026-10-11

缓存过期后先给旧内容再后台更新,这个缓存指令解决什么

Cache-Control 的 stale-while-revalidate 允许在过期后的窗口期内先复用旧内容响应、同时后台向源站重新校验,把校验延迟从用户响应里隐藏。本文按 MDN 文档说明它与请求指令 max-stale、以及 no-cache 与 must-revalidate 的分工,并给出页面文档与静态资源分开设置的建议。

2026-10-11

公告把示例功能整段移除以修掉资源分配问题,生产站该留演示代码吗

Drupal公告SA-CONTRIB-2026-215的评级只是Less critical,处理方式却把邮件示例功能整个移除,因为示例存在没有上限的资源分配问题。生产站要不要保留演示代码,判断依据应是暴露面而不是风险评级。本文拆解示例代码带出的三类风险、部署阶段的清理清单,以及保留演示入口时的限制办法。

2026-10-11

图片处理库被列为攻击面,站点上传环节该收哪几道门禁

图片处理库在服务端解码用户上传的二进制内容,远程代码执行往往发生在解码器层而不是业务代码。PbootCMS在V3.2.22版本记录里把危险coder门禁、输入格式白名单与资源上限一起加入安全硬化,并修复了合法图片误判。本文按这三道门禁讲清站点上传环节该收的口子,以及收得太紧为什么会误伤正常图片。

2026-10-11