修复XXE漏洞时Java 8的XMLInputFactory设置属性报未识别错误
基本背景
- 运行环境:Java 8 / SpringBoot v1.3.3.RELEASE
- 项目情况:存量老旧Java代码库,近期团队引入Sonar代码扫描能力,核心任务是修复扫描出的Critical/Blocker级别安全漏洞
- 扫描给出的漏洞整改要求:禁用XML解析过程中的外部实体访问
问题详情
- 项目中创建XML输入工厂的原有代码非常简单:
XMLInputFactory factory = XMLInputFactory.newInstance(); - 按照Sonar给出的通用修复指引,为这个工厂实例追加了如下属性配置:
factory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, ""); factory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); - 运行单元测试时直接抛出异常:
java.lang.IllegalArgumentException: Unrecognized property 'http://javax.xml.XMLConstants/property/accessExternalDTD' - 做了对照验证:把完全相同的属性配置用到DocumentBuilderFactory上时,不会出现任何报错,示例代码如下:
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); docBuilderFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); docBuilderFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
已开展的排查
- 检索Java官方的公开缺陷记录,查到一个已修复的同类问题:该问题原本关联TransformerFactory组件,和当前遇到的“不支持安全配置属性”现象一致,但未查询到XMLInputFactory组件存在同类公开缺陷记录。
- 当前需要找到适配这套老旧技术栈的可行临时方案或彻底修复办法。
内容的提问来源于stack exchange,提问作者samme4life
相关产品推荐
相关产品推荐

