-
1、原理
执行XML文件外部实体包含的恶意链接信息,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
xml文件是一种信息传输和存储的文本,HTML 是用来展示数据的。
XML有自己的语法结构,其中实体就是其中一个特性,实体是一个预先定义的数据或数据集合。有了实体类似一个变量可以定义关联其他数据之后,方便直接引用
实体分为三类:普通实体与参数实体、内部实体与外部实体、已解析实体与未解析实体。根据实体内容和DTD包含关系分为内部实体和外部实体
内部实体:定义一个内部实体变量它的引用内容已经在当前DTD文件内存在
外部实体:定义一个实体变量它的内容不在当前DTD内通过URI引用
-
2. 防御
2.1 可以通过禁用实体关闭实体解析开关(如PHP函数关闭 libxml_disable_entity_loader(true))
2.2过滤用户提交的xml数据(关键字system和public)
-
3、演示
3.1、php自带函数xml解析执行函数 simplexml_load_string,可以 读取某地xml文件和执行,
3.2、 php自带文件创建函数file_put_contents ,传入文件内容和文件名字可以创建文件