XML学习
前言
因为要学习XXE漏洞,所以学之前先了解,学习一波XML,顺带做一下笔记,方便以后查阅。
什么是XML
- XML全称是 Extensible Markup Language ,中文为可扩展表示语言。
- XML 是独立于软件和硬件的信息传输工具。
XML作用
XML 是被设计为传输和存储数据的,它的侧重的是数据的内容。
XML与HTML的主要差异
- 首先明确一点,XML 不是 HTML 的替代。
- HTML 是被设计来显示信息,侧重于数据的外观,而XML 旨在传输信息
示例XML代码
<?xml version="1.0" encoding="utf-8"?>
<resume>
<name>playwin</name>
<gender>male</gender>
<skill>xml</skill>
</resume>
XML语法
- 下面分析这串代码:
-
为了形成良好的文档习惯,也为了给他人阅读的方便,尽量加上<?xml version=“1.0” encoding=“utf-8”>
- <?xml ?>标签
- version 是版本
- encoding 字符编码
-
下面< resume > , < name >等标签是xml的基本组成部分,有斜杆和无斜杆形成一对标签
-
<标签名字>内容</标签名字>
-
xml没有定义标签,根据个人需要,可以随意起名,尽量简洁,相比html标签,可以让标签里的内容更加直观
-
标签大小写必须要一致,像< name>< /Name>这样的是不合法的
-
标签必须要闭合,也就是有< name>,就必须要有< /name>关闭标签
-
可以这样理解,因为xml对大小写敏感,所以< name>< /Name>是两个不同的标签,两者都没闭合,因此会出错,不合法
-
虽然标签可以随意命名,随意增加,但必须要有根标签,也就是有一个标签包着所有标签,上面代码的< resume>< /resuem> 就是
-
也可以说成< name>,< gender>,< skill>等标签嵌套在< resume>中,< name>标签中也是可以嵌套其他标签的
-
什么是XML的元素
- XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
- 示例代码中< name>,< gender>,< skill>就是< resume>的元素
- 元素中也可以有元素,也可以是文本
- 元素也可以有属性
什么是XML的属性
- 属性可以说是标签的额外附加信息
- 属性有时处理文件时必不可少
属性的使用
- 示例代码<?xml>中version ,encoding就是它的属性,1.0和utf-8就是属性值
- 属性值必须被"双引号"或者’单引号’包围,不可两个混用
- 属性使用:
<name gender='male'> playwin </name>
或
<name> playwin </name>
<gender> male </gender>
-
不要滥用属性
- 像示例代码如果被写成这样
<?xml version="1.0" encoding="utf-8"> <resume> <name gender='male' skill='xml' age='666'>playwin</name> </resume>
这样的用法就违背xml的设计,xml可不是这样使用的
尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
-
属性的缺点
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
实体引用
- 在xml中有一些字符拥有特殊的意义
- 如果你把字符 “<” 放在 XML 元素中,会发生错误,因为解析器会把它当作新元素的开始。
- 这样会产生 XML 错误:
<num> if num < 1000 </num>
- 为了避免这个错误,用实体引用来代替 “<” 字符
<num> if num < 1000</num>
- 在 XML 中,有 5 个预定义的实体引用:
Ps:在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是尽量用实体引用来代替它。