XML基础知识XML简介:XXE(XMLExternalEntityInjection)XML外部实体注入,XML是一种类似于HTML(超文本标记语言)的可扩展标记语言,是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可作为一个外部引用。内部的DOCTYPE声明假如DTD被包含在您的XML源文件中,它应当通过下面的语法包装在一个DOCTYPE声明中:!DOCTYPE根元素[元素声明]带有DTD的XML文档实例:?xmlversion=1.0?!DOCTYPEnote[!ELEMENTnote(to,from,heading,body)!ELEMENTto(#PCDATA)!ELEMENTfrom(#PCDATA)!ELEMENTheading(#PCDATA)!ELEMENTbody(#PCDATA)]notetoGeorge/tofromJohn/fromheadingReminder/headingbodyDontforgetthemeeting!/body/note根据以上代码,做出如下解释!DOCTYPEnote(第二行)定义此文档是note类型的文档。!ELEMENTnote(第三行)定义note元素有四个元素:to、from、heading,、body!ELEMENTto(第四行)定义to元素为#PCDATA类型!ELEMENTfrom(第五行)定义from元素为#PCDATA类型!ELEMENTheading(第六行)定义heading元素为#PCDATA类型!ELEMENTbody(第七行)定义body元素为#PCDATA类型外部文档声明假如DTD位于XML源文件的外部,那么它应通过下面的语法被封装在一个DOCTYPE定义中:!DOCTYPE根元素SYSTEM文件名这个XML文档和上面的XML文档相同,但是拥有一个外部的DTD:?xmlversion=1.0?!DOCTYPEnoteSYSTEMnote.dtdnotetoGeorge/tofromJohn/fromheadingReminder/headingbodyDontforgetthemeeting!/body/note这是包含DTD的note.dtd文件:!ELEMENTnote(to,from,heading,body)!ELEMENTto(#PCDATA)!ELEMENTfrom(#PCDATA)!ELEMENTheading(#PCDATA)!ELEMENTbody(#PCDATA)通过DTD,您的每一个XML文件均可携带一个有关其自身格式的描述。通过DTD,独立的团体可一致地使用某个标准的DTD来交换数据。而您的应用程序也可使用某个标准的DTD来验证从外部接收到的数据。您还可以使用DTD来验证您自身的数据。学习了DTD的两种引用方法,下面我们主要学习以下XXE漏洞需要利用的DTD实体实体的概念:实体是用于定义引用普通文本或特殊字符的快捷方式的变量。实体引用是对实体的引用。实体可在内部或外部进行声明。一个内部实体声明语法:!ENTITY实体名称实体的值例子:DTD例子:!ENTITYwriterBillGates!ENTITYcopyrightCopyrightW3School.
转载请注明:http://www.vviuov.com/lcbx/1063448.html