DTD实体声明(自定义)
作用:类似于C语言的宏定义(#define)
关键字:ENTITY
语法格式:<!ENTITY entity-name "entity-value">
<!ENTITY SSH "port:22">
<Port>SSH:&SSH;</Port>
成功将实体输出
如何对完成DTD限制的规则应用到xml文档中,就类似于js,css如何应用于html上相同,主要分为两大类,页内嵌入和页外引入
XML引入DTD进行应用
1.内部的 DOCTYPE 声明嵌入方法
关键字:DOCTYPE
语法格式:<!DOCTYPE root-element [element-declarations]>
根据语法格式需要指定根元素(root-element),是不是可以指定其他元素?
<?xml version="1.0"?>
<!DOCTYPE to [
<!ENTITY SSH "port:22">
]>
<root>
<to>
<ssh>ssh:&SSH;</ssh>
</to>
</root>
成功执行实体
root元素依旧能够解析实体自己一度理解:可以把root-element理解为作用域,可以将DTD规则应用于本元素与子元素
但是自己重新进行测试时,发现了一些端倪
所以此处产生了一个问题,这个root-element要求是不是可以xml任意有的元素即可
2.外部的DTD引用
关键字:DOCTYPE
语法格式:<!DOCTYPE type-of-doc SYSTEM/PUBLIC "dtd-name">
type-of-doc:文档类型名称,自定义值,为了规范性,一般取根元素名称
dtd-name:可以是具体的dtd文件,也可以是远程的dtd链接(URL)
参数 | 功能 |
---|---|
SYSTEM | 使用的私有的外部DTD文件 |
PUBLIC | 调用公开的DTD文件(权威机构) |
一般搭配是:SYSTEM配合本地位置dtd文件 PUBLIC配合URL文件
通过外部实体语法引用外部DTD实体。
但是在使用浏览器执行引用外部xml实体时出现问题,无法识别定义的实体;
外部实体未识别
对于未正确显示的情况,自己也进行资料查找,最后查找到了答案xml引用实体报错怎么回事
后记:外部实体引用是非常危险,著名的XXE漏洞本质就是外部实体注入来执行恶意代码,利用SSRF漏洞内网探测,甚至可以读取任意文件,执行系统命令。
第一篇:XML简介(1)--头部声明
第二篇:XML编写(2)--语法要求
第三篇:XML规范(3)--DTD限制
第五篇:XXE基础(1)--实体类别
第六篇:XXE利用(2)--漏洞实现
第七篇:XXE后记(3)--抛砖引玉
网友评论