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

求助:TransformerFactory引发XML解析漏洞(SonarQube检测问题修复)

解决XML解析中禁用外部实体访问的TransformerFactory漏洞

SonarQube检测到的漏洞源于默认TransformerFactory实例未限制外部实体访问权限,攻击者可通过恶意XML文件触发XXE(XML外部实体)攻击,读取服务器本地文件或发起未授权网络请求。

修复方案

创建TransformerFactory实例后,通过设置安全属性彻底禁用外部实体访问:

StreamSource ss = new StreamSource(this.getClass().getClassLoader().getResourceAsStream(template));
TransformerFactory factory = TransformerFactory.newInstance();

// 启用安全处理模式,限制XML处理中的危险操作
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
// 禁止访问外部DTD文件
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
// 禁止访问外部样式表资源
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

Transformer ts = factory.newTransformer(ss);

参数说明

  • FEATURE_SECURE_PROCESSING:开启JAXP安全处理模式,强制XML处理器遵守安全限制,阻止潜在恶意操作。
  • ACCESS_EXTERNAL_DTD:设为空字符串,完全禁止加载外部DTD,切断外部实体引入途径。
  • ACCESS_EXTERNAL_STYLESHEET:设为空字符串,禁止引用外部样式表,避免样式表包含恶意实体定义。

兼容提示

若旧版JDK或特定TransformerFactory实现不支持上述属性,可捕获TransformerConfigurationException并切换至安全XML处理器(如Apache Xerces),但优先使用JDK原生配置方案以减少额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:08:17