㈠ 【网络安全】JAVA代码审计—— XXE外部实体注入
XXE外部实体注入是一种严重的安全威胁,当XML解析器解析恶意外部实体时,可能导致文件读取、命令执行、网络扫描等危害。要防御这种攻击,关键在于理解XML基础和其潜在漏洞。
首先,XML基础包括语法规则,如标签对大小写敏感、正确嵌套结构等。实体引用需用HTML实体表示,如使用>代替>。XML文档需有根元素,属性值需加引号,空格会被保留。
XML结构中,元素、属性和实体是核心组成部分。DTD用于规范文档格式,支持内部声明和外部引用。PCDATA和CDATA处理方式不同,其中实体分为一般实体和参数实体,可能引发XXE攻击。
XXE攻击的具体表现是通过构造恶意外部实体,如在解析XML时加载外部文件,造成安全问题。判断XXE的方法包括查看HTTP头中的XML相关字符串,以及观察XML内容是否被解析。在实际测试中,可能遇到不同环境下的回显情况,如Blind XXE,需要借助其他手段传递数据。
针对JAVA代码审计,关键在于禁用XML的外部实体解析,这可以通过设置解析器的特性或者升级相关库(如使用DocumentHelper的2.1.1及以上版本)来实现。在代码层面,对XMLReader、SAXBuilder、SAXReader等接口的使用要谨慎,务必配置为安全解析模式。