求助: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
相关产品推荐
相关产品推荐

