XML被设计用来传输和存储数据,这里提一下xml与html的区别:HTML 旨在显示信息,而 XML 旨在传输信息

而DTD定义 XML 文档的合法构建模块,它使用一系列的合法元素来定义文档结构,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

内部声明DTD<!DOCTYPE 根元素 [元素声明]>
外部声明DTD<!DOCTYPE 根元素 SYSTEM “文件名”>
<!DOCTYPE note SYSTEM “Note.dtd”>
或者<!DOCTYPE 根元素 PUBLIC “public_ID” “文件名”>

xxe漏洞就是允许了引入外部实体的加载,从而导致程序在解析xml的时候,可以加载恶意外部文件,从而造成文件读取等危害。



提交一段正常的代码,正常读取

<?xml version = “1.0”?>
<!DOCTYPE ANY [
<!ENTITY f SYSTEM “file:///1.txt”>
]>
<x>&f;</x>


读取磁盘中的一个测试文档的内容,成功读取显示


防范方法:
1.使用开发语言提供的禁用外部实体的方法
2.过滤用户提交的XML数据