Java XML解析XXE漏洞修复 设置Feature禁止外部实体

月夜之吻

月夜之吻

2026-03-14

821人浏览

原创

仅设置 feature_secure_processing 不足以防御 xxe,因其不默认禁用 dtd 声明;必须显式调用 setfeature("http://apache.org/xml/features/disallow-doctype-decl", true) 才能彻底拦截。

java xml解析xxe漏洞修复 设置feature禁止外部实体

Java SAXParserFactory 设置 FEATURE_SECURE_PROCESSING 为什么不够

只开 FEATURE_SECURE_PROCESSING 不能防 XXE,它只是启用基础安全策略,不默认禁用外部实体。JDK 7+ 默认仍允许 DTD 解析,setFeature("http://apache.org/xml/features/disallow-doctype-decl", true) 才是关键动作。

常见错误现象:SAXParseException 报 “DOCTYPE is disallowed” 却仍能加载外部 DTD;或看似没报错,但 http://example.com/xxe 被实际请求 —— 说明只设了 FEATURE_SECURE_PROCESSING,漏掉真正拦截点。

  • setFeature("http://apache.org/xml/features/disallow-doctype-decl", true) 必须显式调用,否则 DTD 声明(哪怕空的)都会被解析
  • 若业务真需要 DTD(极少见),改用 setFeature("http://xml.org/sax/features/external-general-entities", false) + setFeature("http://xml.org/sax/features/external-parameter-entities", false)
  • 注意:Apache Xerces 2.9.1+ 才完全支持 disallow-doctype-decl,旧版本需升级或换方案

DocumentBuilder 用 setFeature 禁用外部实体的实际写法

很多人直接 new DocumentBuilderFactory 就 setFeature,却忘了 factory 创建的 builder 才是真正干活的。feature 必须在 newDocumentBuilder() 之前设置,且 builder 实例不继承 factory 的 feature 状态 —— 每次都要重设。

使用场景:Spring Boot 里用 DocumentBuilder 解析用户上传的 XML 配置文件。

  • 必须在 DocumentBuilder builder = factory.newDocumentBuilder() 前调用 factory.setFeature(...)
  • 推荐一步到位:用 DocumentBuilderFactory.newInstance().setFeature(...).newDocumentBuilder() 链式调用,避免中间状态污染
  • 别信“已全局禁用”的错觉 —— Tomcat、WebLogic 等容器可能重置 factory,默认行为不可靠

javax.xml.stream.XMLInputFactory 的 XXE 防护盲区

XMLInputFactory 是 StAX 解析器入口,它不走 setFeature 路线,而是用 setProperty 控制实体解析。设错属性名或值类型(比如传字符串 "false" 而非布尔 false)会导致静默失效。

Android系统中XML解析的实践 中文WORD版
Android系统中XML解析的实践 中文WORD版

本文档主要讲述的是Android系统中XML解析的实践;希望对大家的学习会有帮助;感兴趣的朋友可以过来看看

下载

错误现象:代码里写了 factory.setProperty("javax.xml.stream.isReplacingEntityReferences", "false"),但依然触发外连 —— 因为该属性只控制是否替换已定义实体,不阻止 DTD 加载本身。

  • 真正起效的是:factory.setProperty("javax.xml.stream.supportDTD", false)
  • 配合禁用外部参数实体:factory.setProperty("javax.xml.stream.isValidating", false)(虽然名字像校验,实则影响 DTD 处理逻辑)
  • 注意:JDK 自带 StAX 实现(com.sun.xml.internal.stream.XMLInputFactoryImpl)才完全支持这些属性;第三方实现(如 Woodstox)行为可能不同

测试 XXE 是否真被堵住的最小验证方式

别依赖“没报错就安全”。用最简 payload 直接测网络行为,比看日志更可靠。

可复用的测试 XML 片段:

<?xml version="1.0"?> ]>
<data>&xxe;</data>
  • 启动本地监听:python3 -m http.server 8000,然后解析该 XML
  • 如果监听端口收到 GET 请求,说明 XXE 未被拦截 —— 无论抛不抛异常
  • 生产环境禁用 http 协议还不够,攻击者会用 file:///etc/passwdftp://,所以必须禁用 DTD 声明本身

复杂点在于:某些老系统依赖 DTD 定义的实体别名(如  ),强行禁用 DTD 会导致解析失败。这时候得权衡 —— 是改业务逻辑适配无 DTD 方案,还是隔离解析上下文并严格限制协议白名单。事情说清了就结束

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

xml解析

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.26

318

5

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

242

5

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

382

5

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

222

5

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

282

5

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

305

5

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

413

5

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

237

5

有哪些常见的tomcat漏洞
有哪些常见的tomcat漏洞

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

927

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.4万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 131.8万人学习