返回首页

XSLT 在 Edge 中的禁用:策略与风险

Microsoft 在 Edge 147 中实施 XSLTEnabled 策略,以禁用过时的 XSLT,因为存在安全风险。本文分析了使用情况、向 JS 迁移,以及其他浏览器到 2027 年的计划。

Edge 正在放弃 XSLT:开发者将面临什么
Advertisement 728x90

## 在 Microsoft Edge 中禁用 XSLT:新策略与安全风险

微软将在 2026 年 4 月 9 日发布的 Edge 147 版本中引入一项禁用 XSLT 的策略。XSLTEnabled 功能允许管理员控制对过时 XML 转换语言的访问,从而最小化相关漏洞。这是对完全弃用迈出的一步,与 Chromium、WebKit 和 Gecko 的计划保持一致。

XSLT 是什么,为什么它已过时

XSLT(Extensible Stylesheet Language Transformations)是 1999 年 W3C 标准,用于将 XML 转换为 HTML 或其他格式。该语言的最新版本并未获得浏览器广泛支持。使用统计:仅有 0.02% 的网页使用 XSLT,转换占比不到 0.001%。

现代替代方案提供更大的灵活性:

Google AdInline article slot
  • JavaScript 框架(React、Vue.js)用于动态数据处理。
  • Web Components 和 Shadow DOM 用于结构化转换。
  • 使用模板引擎(Handlebars、Pug)进行服务器端渲染。

这些工具可与 REST/GraphQL API 无缝集成,避免客户端 XML 解析器。

Edge v147 中的 XSLTEnabled 策略

Edge 147 的安全更新新增了一组控制 XSLT 的策略:

  • XSLTEnabled:全局启用或禁用 XSLT 处理器。
  • XSLTBaseURL:样式表的基础 URL(限于企业场景)。
  • XSLTSecurityManager:管理对 DOM 和网络资源的访问。

建议企业客户测试禁用它:评估对遗留应用的影响,监控解析错误日志。微软强调网络安全风险——libxslt 存在未修补漏洞,因为缺乏积极维护。

Google AdInline article slot

该策略可通过 Windows 注册表(HKLM\SOFTWARE\Policies\Microsoft\Edge\XSLTEnabled)或 Active Directory 中的组策略应用。注册表语法:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
"XSLTEnabled"=dword:00000000

重启 Edge 后,转换将被阻止,并返回 NS_ERROR_XSLT_NOT_AVAILABLE 错误。

各浏览器弃用时间表

  • Edge (Chromium):v147(2026 年 4 月)引入策略,完全移除跟随 Chromium。
  • Chrome:146(2026 年 3 月)测试,176(2027 年 8 月)禁用。
  • Safari (WebKit):计划 2027 年移除,转向 SwiftUI 处理类似 XML 任务。
  • Firefox (Gecko):类似策略正在开发中,优先使用 WebAssembly 进行转换。

Chromium 开发者正在协调迁移:chrome://flags/#enable-xslt 标志正在逐步淘汰。

Google AdInline article slot

安全风险与迁移

XSLT 核心库 libxslt 易受 XXE(XML External Entity)攻击影响,攻击者可提取本地文件或执行 SSRF。由于缺乏补丁,2026 年继续使用风险很高。

中高级开发者的迁移策略:

  • 代码审计:grep -r 'xslt\.' 或堆栈跟踪分析。
  • 用 JS 中的 XPath + DOMParser 替换。
  • 测试:使用 Puppeteer 模拟禁用 XSLT。
  • 降级处理:使用 Modernizr 进行功能检测,或原生 document.implementation.hasFeature('XSLT', '1.0')

将简单 XSLT 迁移到 JS 示例:

// Legacy XSLT
const xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsltDoc);
const result = xsltProcessor.transformToFragment(xmlDoc, document);

// Modern JS alternative
function transformXML(xmlString, xslString) {
  const xmlDoc = new DOMParser().parseFromString(xmlString, 'text/xml');
  const xslDoc = new DOMParser().parseFromString(xslString, 'text/xml');
  const xsltProcessor = new XSLTProcessor();
  xsltProcessor.importStylesheet(xslDoc);
  return xsltProcessor.transformToDocument(xmlDoc);
}

关键要点

  • Edge 147 中的 XSLTEnabled 策略从 2026 年 4 月开始实现 XSLT 的受控弃用。
  • libxslt 漏洞(XXE、SSRF)在无补丁情况下使该技术不安全。
  • 迁移到 JS 转换或服务器端模板化——2027 年将成为标准。
  • 所有引擎(Chromium、WebKit、Gecko)将于 2027 年统一弃用。
  • 企业管理员:通过 GPO 测试,监控遗留 XML 应用。

— Editorial Team

Advertisement 728x90

继续阅读