XML 相关漏洞

XML基础

基础

https://www.cnblogs.com/l0nmar/p/13337996.html

一个XML示例:

<?xml version="1.0" encoding="utf-8"?>
<!--这里是注释-->
<books>
    <book id="b01">
        <name>Python黑客编程从入门到入狱</name>
        <author>张三</author>
        <price>$20.00</price>
    </book>
</books>

如上代码,第一行是XML文档的声明,由“<?xml”开头,以“?>”结尾,其中的内容是对本xml文档所使用的版本 “version”和编码“encoding”的声明,version一般情况下都是1.0,因为目前为止,xml只有这一个版本。

第二行是注释,不多做解释。

从第三行开始,就是XML文档的主要内容了,如代码中所示的“”,是本文档的根元素,“”是“”的子元素,而“、、”也都是子元素,但是是“”的子元素。

那么我们可以将这个XML文档,视为是一个描述图书的文档,它所描述的内容,包括了图书的名字、作者和价格,如果使用程序对这个文档进行解析后,那么这些信息就可以更好的显示在web页面或者是应用程序中,方便用户查看。

XML的格式

a. 声明信息,用于描述xml的版本及编码格式。

<?xml version="1.0" encoding="utf-8" ?>

b. xml有且仅有一个根元素(可以理解为顶级的元素、没有被其他元素包起来的元素)。个人理解:像是数据库的表名

c. xml中大小写敏感

d. 标签是成对出现的,所有元素都必须有一个关闭标签,而且要正确嵌套。

e. 属性值要使用双引号

f. 注释的写法。

<!--这是注释 -->
g. 一个格式良好的xml文件

<?xml version="1.0" encoding="utf-8"?>
<!--这里是注释-->
<books>
    <book id="b01">
        <name>Python黑客编程从入门到入狱</name>
        <author>张三</author>
        <price>$20.00</price>
    </book>
</books>

h. XML并不是让用户直接打开的,而是让别的语言来从文件中读取信息的。至于为什么可以直接用浏览器浏览,只是浏览器可以识别而已。

XML的属性

拥有正确语法的 XML 被称为"形式良好"的 XML。而判断XML的语法是否合法,叫做XML验证,是通过 DTD进行验证的。
DTD:Document TypeDefinition 文档类型定义。用于约束xml的文档格式,保证xml是一个有效的xml,DTD分为内部和外部两种。DTD定义在xml文件中视为内部DTD;DTD定义在外部的dtd文件中,视为外部DTD。
说的简单一点,DTD就是对当前的XML文档做一个约束,DTD中定义了这个文档中的根元素是什么,有几个子元素,每个子元素能出现几次,哪些元素有属性,属性的类型是什么,属性的默认值是什么等等,如果后面的XML内容中,与DTD中的定义不符,如元素个数不符、元素名称大小写不符等,那么XML文件解析时就会报错。

1)内部DTD的使用

内部DTD的定义

<!DOCTYPE 根元素 [元素声明]>

元素声明语法

[
<!ELEMENT 根元素 (子元素)>
<!ELEMENT 根元素的子元素 (子元素的子元素,子元素的子元素)>
<!ELEMENT 子元素 (数据类型)>
<!ELEMENT 子元素 (数据类型)>
]

元素声明中的数量词

“+” 表示出现一次或者多次
"?"表示出现0次或多次
"*"表示出现任意次。

属性声明语法

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

示例:

<?xml version="1.0" encoding="utf-8"?>
<!--这里是注
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
XML外部实体注入漏洞XML External Entity Injection, 简称XXE)是一种常见的安全漏洞,攻击者可以利用这种漏洞来读取任意文件、执行系统命令等操作。 在XML文档中,可以通过定义实体来引用外部资源,例如文件、URL等。当XML解析器解析XML文档时,如果不对外部实体进行限制,攻击者可以通过构造恶意的XML文档,将外部实体指向敏感文件或者恶意URL,从而导致漏洞。 具体来说,攻击者可以在XML文档中定义一个实体,使用DTD(Document Type Definition)语法将该实体指向一个外部文件,然后在XML文档中使用该实体。当XML解析器解析该实体时,就会将指定的外部文件读取进来,从而导致漏洞。 例如,下面的XML文档定义了一个名为“file”的实体,指向了一个敏感文件“/etc/passwd”: ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE message [ <!ELEMENT message (#PCDATA)> <!ENTITY file SYSTEM "file:///etc/passwd"> ]> <message>&file;</message> ``` 如果XML解析器不对外部实体进行限制,那么解析该文档时就会读取“/etc/passwd”文件的内容,并将其包含在<message>元素中返回给应用程序,从而导致敏感信息泄漏。 为了防止XXE漏洞,可以采取以下措施: 1. 禁止使用外部实体,或者限制外部实体的使用范围。可以在XML解析器中设置相关参数,例如禁止加载外部实体、禁止解析DTD等。 2. 对外部实体进行白名单过滤,只允许加载特定的URL或文件。 3. 检查输入数据,避免恶意输入注入到XML文档中。 4. 对于持久化的XML数据,应该使用安全XML库来处理,例如使用DOM4J或JAXB等库,这些库会自动过滤掉外部实体。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值