已按Fortify建议修复XXE漏洞仍被检测,求解决方案
解决Fortify持续误报Transformer XXE漏洞的方案
一、确认配置覆盖所有TransformerFactory实现
- 先锁死TransformerFactory实现类,避免厂商默认的不安全实现:
// 先设置系统属性,再初始化TransformerFactory System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"); - 给实例逐个添加安全限制,确保无遗漏:
TransformerFactory tFactory = TransformerFactory.newInstance(); // 开启核心安全处理 tFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); // 禁止DOCTYPE声明 tFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); // 禁用外部通用/参数实体 tFactory.setFeature("http://xml.org/sax/features/external-general-entities", false); tFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); // 禁止加载外部DTD tFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); // 限制外部DTD和样式表访问 tFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); tFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); - 注意配置顺序:先开启
FEATURE_SECURE_PROCESSING,再禁用实体相关特性
二、排查代码中的遗漏路径
- 检查项目中所有直接调用
TransformerFactory.newInstance()的位置,确保都添加了安全配置 - 追踪第三方库(如XML解析、报表工具)是否间接创建TransformerFactory,需在源头补充安全配置
三、处理Fortify误报
- 在扫描结果中将该问题标记为False Positive,附上配置代码说明或截图
- 自定义Fortify规则:为XXE检测添加过滤条件,识别已配置安全特性的代码并跳过检测
- 升级Fortify版本:旧版本规则可能未适配新JDK安全配置,更新后可解决部分误报
四、手动验证漏洞是否存在
- 静态检查:遍历所有TransformerFactory实例,确认安全配置全覆盖
- 动态测试:构造XXE payload(如尝试读取敏感文件),验证代码是否真的存在漏洞
内容的提问来源于stack exchange,提问作者SATYAJIT PATIL
相关产品推荐
相关产品推荐

