XML处理模块
***********

**源码：** Lib/xml/

======================================================================

用于处理XML的Python接口分组在 "xml" 包中。

备注:

  如果你需要解析不受信任或未经身份验证的数据，请参阅 XML 安全。

值得注意的是 "xml" 包中的模块要求至少有一个 SAX 兼容的 XML 解析器可用
。在 Python 中包含 Expat 解析器，因此 "xml.parsers.expat" 模块将始终可
用。

"xml.dom" 和 "xml.sax" 包的文档是 DOM 和 SAX 接口的 Python 绑定的定义
。

XML 处理子模块包括:

* "xml.etree.ElementTree"： ElementTree API，一个简单而轻量级的XML处理
  器

* "xml.dom"：DOM API 定义

* "xml.dom.minidom"：最小的 DOM 实现

* "xml.dom.pulldom"：支持构建部分 DOM 树

* "xml.sax"：SAX2 基类和便利函数

* "xml.parsers.expat"：Expat解析器绑定


XML 安全
========

攻击者可利用 XML 特性实施拒绝服务攻击、访问本地文件、建立与其他机器的
网络连接，甚至绕过防火墙防护。

Expat库版本低于 2.6.0 可能存在以下安全漏洞："十亿笑声攻击"、"二次爆炸
攻击" 和 "大令牌攻击"。 若Python 使用系统提供的旧版 Expat 库，则可能受
这些漏洞影响。 可通过检查常量 "pyexpat.EXPAT_VERSION" 确认当前版本。

"xmlrpc" 面对 "解压缩炸弹" 攻击时是 **脆弱的**。

billion laughs / exponential entity expansion （狂笑/递归实体扩展）
   Billion Laughs 攻击 -- 也称为递归实体扩展 -- 使用多级嵌套实体。 每
   个实体多次引用另一个实体，最终实体定义包含一个小字符串。 指数级扩展
   导致几千 GB 的文本，并消耗大量内存和 CPU 时间。

quadratic blowup entity expansion（二次爆炸实体扩展）
   二次爆炸攻击类似于 Billion Laughs 攻击；它也滥用了实体扩展。 它不是
   嵌套实体，而是一遍又一遍地重复一个具有几千个字符的大型实体。 这种攻
   击不如递归情况有效，但它可避免触发禁止深度嵌套实体的解析器对策。

decompression bomb
   Decompression bombs（解压炸弹，又名 ZIP bomb）适用于所有可以解析压
   缩 XML 流（例如 gzip 压缩的 HTTP 流或 LZMA 压缩的文件）的 XML 库。
   对于攻击者来说，它可以将传输的数据量减少三个量级或更多。

解析大量词元
   Expat 需要重新解析未完成的词元；在没有 Expat 2.6.0 所引入的防护措施
   的情况下，这会导致可被用来在解析 XML 的应用程序中制造拒绝服务攻击的
   指数级运行时间。 此问题被称为 **CVE 2023-52425**。
