XML外部实体(XXE)漏洞因解析器未禁用外部实体导致,攻击者可利用其读取敏感文件、探测内网或触发带外数据泄露;防御需在Java、Python、.NET、PHP等环境中关闭外部实体解析,并优先使用JSON替代XML。

XML外部实体引用(XXE,XML External Entity)是一种安全漏洞,出现在应用程序解析XML输入时,对外部实体的声明和加载未加限制。攻击者可利用此漏洞读取服务器本地文件、执行远程请求,甚至实现服务器端请求伪造(SSRF)或拒绝服务攻击。
什么是XML外部实体
在XML中,实体用于定义别名以简化内容引用。外部实体指向文档之外的数据源。例如:
zuojiankuohaocn!DOCTYPE example [ <!ENTITY external SYSTEM “file:///etc/passwd”> ]> <data>&external;</data>
上面的代码尝试从服务器读取 /etc/passwd 文件内容。如果解析器支持外部实体且未禁用相关功能,就会将敏感文件内容返回。
常见攻击场景
XXE漏洞常出现在以下情况:
AI实时多语言翻译专家!强大的语音识别、AR翻译功能。
116 - 应用接收用户提交的XML数据,如API接口、配置上传或消息交换格式
- 使用默认配置的XML解析器(如Java中的DOM4J、Python的lxml、.NET的XmlDocument)
- 未关闭外部实体解析功能
典型危害包括:
- 读取系统敏感文件(如
/etc/shadow、) - 探测内网服务(通过
http://192.168.0.1:8080等URL) - 触发带外数据泄露(OOB-XXE),通过DNS或HTTP请求外传数据
如何防御XXE漏洞
核心原则是禁止处理外部实体。具体措施依语言而定:
- Java:使用
DocumentBuilderFactory时,设置以下属性为false:setExpandEntityReferences(false)setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)setFeature("http://xml.org/sax/features/external-general-entities", true)
- Python(lxml):禁用实体解析 parser = lxml.etree.XMLParser(resolve_entities=False)
- .NET:使用
XmlReader并设置DtdProcessing为Prohibit或Ignore - PHP:调用
libxml_disable_entity_loader(true)
另外建议:
- 避免直接解析用户提供的XML,优先使用JSON等更安全格式
- 若必须解析,应在严格验证结构后再处理
- 定期更新XML解析库,防止已知绕过手法
基本上就这些。只要禁用外部实体加载,大多数XXE风险都能避免。关键是开发时要有安全意识,不依赖解析器默认行为。毕竟默认往往不够安全。
以上就是XML外部实体引用的详细内容,更多请关注中文网其它相关文章!
相关标签:
微信扫一扫打赏
支付宝扫一扫打赏
