You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MediaWiki API获取维基内容是否需做HTML净化?

关于MediaWiki API返回HTML的安全与净化问题

是否需要净化MediaWiki返回的HTML?

答案是视场景而定,但不建议完全跳过净化:

  • 如果你的页面只是单纯展示维基百科的公开内容,且没有和用户输入、用户账户上下文混合,直接使用的风险极低,但并非绝对为零——极端情况下可能存在未被维基过滤掉的隐式风险,比如某些恶意SVG属性、特殊协议链接。
  • 如果你的页面涉及用户交互、用户输入混合,或者运行在登录态环境下,必须做净化,否则可能引入XSS或其他注入风险。

DOMPurify破坏结构的核心原因是默认配置过于严格,过滤了MediaWiki依赖的自定义标签、属性和类名。你可以通过定制DOMPurify白名单解决,保留维基HTML所需的关键元素,示例配置如下:

// 适配MediaWiki HTML的DOMPurify配置
const sanitizedHtml = DOMPurify.sanitize(rawWikiHtml, {
  // 允许维基常用的特殊标签
  ADD_TAGS: ['iframe', 'svg', 'math', 'template'],
  // 允许MediaWiki的自定义数据属性
  ADD_ATTR: ['data-mw', 'data-parsoid', 'data-parsoid-version'],
  // 放宽属性白名单,保留样式和结构相关属性
  ALLOWED_ATTR: [...DOMPurify.sanitizeDefaults.ALLOWED_ATTR, 'class', 'style', 'data-mw', 'data-parsoid'],
  // 保留必要的块级和行内标签
  ALLOWED_TAGS: [...DOMPurify.sanitizeDefaults.ALLOWED_TAGS, 'div', 'span', 'section', 'figure']
});

你可以根据实际渲染的内容,进一步调整白名单的标签和属性,平衡安全性与渲染效果。

维基百科的安全保障机制

维基百科本身具备多层安全机制降低内容风险:

  • 社区审核体系:所有页面修改需经过志愿者审核,恶意内容会被快速回滚或删除,同时有自动工具拦截明显的恶意代码(如脚本标签、危险事件属性)。
  • MediaWiki内置净化:在页面保存和渲染阶段,MediaWiki会自动过滤危险HTML,只允许预定义的安全标签和属性,用户输入的<script>、onclick等危险代码会被直接移除或转义。
  • 内容安全策略(CSP):维基自身站点通过CSP限制脚本执行,即使存在漏网的恶意代码,也难以在维基环境中运行——但注意,当你把内容嵌入自己的站点时,这个保护机制不生效,需依赖自身站点的安全配置。

实操建议

  1. 优先定制DOMPurify配置,而非完全跳过净化,兼顾安全与渲染需求。
  2. 若展示场景完全无用户交互、无用户输入,可考虑轻量净化(仅过滤脚本标签、事件属性),减少对结构的影响。
  3. 定期关注MediaWiki更新,了解其HTML结构和安全机制的变化,调整净化策略。

内容的提问来源于stack exchange,提问作者Gus Owen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:03:25