XML 被计划用来传输和存储数据。XML 文档行成了一种树布局,它从”根部”开始,然后扩展到”枝叶”。
XML 答应创作者界说自己的标签和自己的文档布局。 1. 所有的 XML 元素都必须有一个关闭标签
2. XML 标签对大小写敏感
3. XML 必须精确嵌套
4. XML 属性值必须加引号
5. 实体引用
6. 在 XML 中,空格会被保留 2.XML布局
第一行是 XML 声明。它界说 XML 的版本 (1.0) 和所利用的编码 (ISO-8859-1 = Latin-1/西欧
字符集)。
拥有精确语法的 XML 被称为“形式精良”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
DTD 全称是 The document type definition,即是文档范例界说,通过 DTD 验证 XML 是否合法 1、形式精良的 XML 文档
(1)XML 文档必须有根元素
(2)XML 文档必须有关闭标签
(3)XML 标签对大小写敏感
(4)XML 元素必须被精确的嵌套
(5)XML 属性必须加引号
如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
复制代码
单独依靠人来检查,太慢了。怎样快速的检查 XML 文档是否是形式精良的文档? 需要一个
工具来快速检查 XML ? 这个工具就是 DTD 2、DTD 可界说合法的 XML 文档构建模块。它利用一系列合法的元素来界说文档的布局。
XML 引用 DTD 检查的方法有两种:
一种是直接在 XML 文档中声明并引用;另一种在 XML 中引入一个外部的 DTD 文档 在 XML 文档内部中写 DTD 声明
DTD 被包含在您的 XML 源文件中,它会被包装在一个 DOCTYPE 声明中:
<!DOCTYPE 根元素 [元素声明]>
复制代码
比方
<?xml version="1.0" ?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>zhang</to>
<from>kill</from>
<heading>Reminder</heading>
<body> Don't forget me this weekend!</body>
</note>
复制代码
在 XML 文档内部中引入外部 DTD 文件 note.dtd
外部文档声明:假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个
外部文档声明:假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个
DOCTYPE 界说中:<!DOCTYPE 根元素 SYSTEM "文件名">
三、XXE漏洞详解
1.XXE漏洞
XXE(XML External Entity)漏洞是一种安全漏洞,存在于利用 XML 解析器解析用户提供的 XML 数据时。漏洞的根本原因是对外部实体引用的不精确处置惩罚,导致攻击者可以利用该漏洞读取文件系统中敏感的数据、执行远程请求等操纵。
XXE漏洞的攻击原理如下:
1.攻击者构造恶意的 XML 数据,其中包含对外部实体的引用。
2.XML 解析器无法精确处置惩罚这些外部实体引用,导致攻击者可以读取任意文件、进行 SSRF 攻击等。
3.攻击者通过修改 XML 数据,获取敏感信息或进行远程请求。 比方