XXE-xml实体注入

。)。  

entity的定义语法为:

<!DOCTYPE filename
[
<!ENTITY entity-name "entity-content"
]>

如果要引用一个外部资源:

<!DOCTYPE test
[
<!ENTITY test SYSTEM "http://xxx.xxx.com/test.xml">
]>

ENTITY可以使用SYSTEM关键字,调用外部资源,而这里是支持很多的协议,如:http;file

然后,在其他DoM结点中可以使用如:&test;引用该实体内容.

那么,如果在产品功能设计当中,解析的xml是由外部可控制的,那将可能形成,如:文件读取,DoS,CSRF

XML 实体攻击必须满足三个条件:

  1. 1、标准的XML解析库支持使用实体引用
  2. 2XML格式允许在XML文章中定义定制实体
  3. 3XML规范允许使用外部应用来定义实体