发布时间:2026-07-25阅读(0)

想要了解XXE,在那之前需要了解XML的相关基础
二、XML基础2.1 XML语法
实体引用,在标签属性,以及对应的位置值可能会出现<>符号,但是这些符号在对应的XML中都是有特殊含义的,这时候我们必须使用对应html的实体对应的表示,比如<对应的实体就是<,>符号对应的实体就是>
在XML中,空格会被保留,如:<p>a空格B</p>,这时候a和B之间的空格就会被保留
2.2 XML结构

需要安全学习资料可以私信我:书籍、视频教程、工具及学习思路【点击查看】
2.2.1 XML文档声明
<?xml version="1.0" encoding="utf-8"?>
2.2.2 元素
元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。
<body>body text in between</body><message>some message in between</message>空元素有例如:hr、br、img
2.2.3 属性
属性可提供有关元素的额外信息
<img src="computer.gif"/>其中,src为属性
2.2.4 实体
实体分为四种类型,分别为:
- 字符实体
- 命名实体
- 外部实体
- 参数实体
2.3 文档类型定义--DTD
DTD是用来规范XML文档格式,既可以用来说明哪些元素/属性是合法的以及元素间应当怎样嵌套/结合,也用来将一些特殊字符和可复用代码段自定义为实体
DTD可以嵌入XML文档当中(内部声明),也可以以单独的文件存放(外部引用)
2.3.1 DTD内部声明
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:
<!DOCTYPE 根元素 [元素声明]>
内部声明DTD示例
<?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>George</to> <from>John</from> <heading>Reminder</heading> <body>Dont forget the meeting!</body></note>以上 dtd 解释如下:
- !DOCTYPE note (第二行)定义此文档是 note 类型的文档。
- !ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
- !ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
- !ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型
- !ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
- !ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型
2.3.2 DTD外部引用
假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:
<!DOCTYPE 根元素 SYSTEM "文件名">
这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:
<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd"><note><to>George</to><from>John</from><heading>Reminder</heading><body>Dont forget the meeting!</body></note>
note.dtd:
<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>
2.3.3 PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记,文本中的标签会被当作标记来处理,而实体会被展开,值得注意的是,PCDATA不应包含&、<和>字符,需要用& < >实体替换,又或者是使用CDATA
2.3.4 CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。
在XML中&、<字符是属于违法的,这是因为解析器会将<解释为新元素的开始,将&解释为字符实体的开始,所以当我们有需要使用包含大量&、<字符的代码,则可以使用CDATA
CDATA由结束,在CDATA当中,不能包含]]>字符串,也不能嵌套CDATA,结尾的]]>字符串不能包含任何的空格和换行
2.3.5 DTD实体
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
实体又分为一般实体和参数实体
1,一般实体的声明语法:
引用实体的方式:&实体名;
2,参数实体只能在DTD中使用,参数实体的声明格式:
引用实体的方式:%实体名;
2.3.5.1 内部实体
<!ENTITY writer "Bill Gates"><!ENTITY copyright "Copyright W3School.com.cn"><author>&writer©right;</author>
2.3.5.2 外部实体
外部实体,用来引入外部资源。有SYSTEM和PUBLIC两个关键字,表示实体来自本地计算机还是公共计算机
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"><!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"><author>&writer©right;</author>
不同程序支持的协议不同
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图