您的位置 首页 编程知识

XML外部实体引用

XML外部实体(XXE)漏洞因解析器未禁用外部实体导致,攻击者可利用其读取敏感文件、探测内网或触发带外数据泄露…


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

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翻译功能。

XML外部实体引用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并设置DtdProcessingProhibitIgnore
  • PHP:调用libxml_disable_entity_loader(true)

另外建议:

  • 避免直接解析用户提供的XML,优先使用JSON等更安全格式
  • 若必须解析,应在严格验证结构后再处理
  • 定期更新XML解析库,防止已知绕过手法

基本上就这些。只要禁用外部实体加载,大多数XXE风险都能避免。关键是开发时要有安全意识,不依赖解析器默认行为。毕竟默认往往不够安全。

以上就是XML外部实体引用的详细内容,更多请关注中文网其它相关文章!

相关标签:

大家都在看:

本文来自网络,不代表四平甲倪网络网站制作专家立场,转载请注明出处:http://www.elephantgpt.cn/15999.html

作者: nijia

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

18844404989

在线咨询: QQ交谈

邮箱: 641522856@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部