XML引用(4)--DTD应用

2020-03-26  本文已影响0人  六亲不认的步伐

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-element理解为作用域,可以将DTD规则应用于本元素与子元素
但是自己重新进行测试时,发现了一些端倪

root元素依旧能够解析实体
所以此处产生了一个问题,这个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)--抛砖引玉

上一篇下一篇

猜你喜欢

热点阅读