XML实体
在这一节,我们将讲解一些关于XML的关键特性,这些特性对于理解XXE漏洞至关重要。
什么是XML?
XML是“可扩展标记语言(extensible markup language)”的缩写。它是一种用于存储和传输数据的语言。与HTML一样,XML使用树形结构标签和数据。不同于HTML的是,XML不使用预定义的标签,因此可以为标签赋予描述数据的名称。在Web历史的早期,XML作为一种数据传输格式曾经非常流行(“AJAX”中的“X”代表“XML”)。但现在,JSON格式的流行度已经超过了XML。
什么是XML实体?
XML实体是一种在XML文档中表示数据项的方式,而不是使用数据本身。各种实体都内置在XML语言的规范中。例如,实体<
和>
代表字符<
和>
。这些元字符用于表示XML标签,因此当它们出现在数据中时,通常必须使用它们的实体表示。
什么是文档类型定义?
XML文档类型定义(DTD)包含一些声明,这些声明可以定义XML文档的结构、它可以包含的数据值类型以及其他项。DTD在XML文档开头的可选DOCTYPE
元素中声明。DTD可以完全独立于文档本身(称为“内部DTD”),也可以从其他地方加载(称为“外部DTD”),还可以是这两者的混合。
什么是XML自定义实体?
XML允许在DTD中定义自定义实体。例如:
这个定义意味着,在XML文档中,任何对实体引用&myentity;
的使用都将被替换为所定义的值:“my entity value
”。
什么是XML外部实体?
XML外部实体是一种自定义实体,其定义位于声明它们的DTD之外。
外部实体的声明使用SYSTEM
关键字,并且必须指定一个加载实体值的URL。例如:
URL可以使用file://
协议,因此可以从文件中加载外部实体。例如:
XML外部实体是导致XML外部实体攻击出现的主要原因。
Last updated