Spring XML 外部实体(XXE)指南:示例和预防
什么是XXE?
XML 文档遵循特定的标准。该标准强调了 XML 文档的构造方式,概述了有效 XML 文档与无效 XML 文档的区别等等。
该标准还指定了一个称为“实体”的术语。实体是某些内容的占位符。
实体可以是内部的,也可以是外部的(就像我们的情况一样)。
实体通过系统标识符访问。此标识符是指向位置的指针。它可以是文件或 URL。该标准规定了 XML 解析器软件访问此实体时应发生的情况。
它获取系统标识符指向的文件/URL,并将系统标识符替换为文件/网站的内容。例如,如果我们有一个如下所示的 XML 文档:
<?xml version="1.0" encoding="UTF-8"?>
<Catalog>
<Movie>
<Title>World War Z</Title>
<Director>Marc Forester</Director>
<Country>USA</Country>
<Year>2013</Year>
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
&xxe;
</Movie>复制
这一行的内容
&xxe;
将被替换为file://etc/passwd中的密码文件的内容,如下所示: