# XML 處理模組

原始碼：Lib/xml/

Python 處理 XML 的介面被歸類於 `xml` 套件中。

備註

如果你需要剖析不受信任或未經驗證的資料，請參閱 XML 安全性。

請務必注意 `xml` 套件中的模組要求至少有一個可用的 SAX 相容 XML 剖析器。Expat 剖析器包含在 Python 中，所以總是可以使用 `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 功能來執行阻斷服務攻擊 (denial of service attack)、存取本地檔案、生成與其他機器的網路連接或繞過防火牆。

Expat 低於 2.6.0 的版本容易受到「十億笑聲」、「二次爆炸」與「大型 token」的影響。Python 也可能因為使用這些系統提供的舊版 Expat 而易受攻擊。請檢查 `pyexpat.EXPAT_VERSION`。

`xmlrpc` 容易受到「解壓縮炸彈」攻擊。

十億笑聲 / 指數實體擴展

  十億笑聲攻擊（也稱為指數實體擴展 (exponential entity expansion)）使用多層巢狀實體。每個實體多次引用另一個實體，最終的實體定義包含一個小字串。指數擴展會產生數 GB 的文本，並消耗大量記憶體和 CPU 時間。

二次爆炸實體擴展

  二次爆炸攻擊類似於十億笑聲攻擊；它也濫用實體擴展。它不是巢狀實體，而是一遍又一遍地重複一個具有幾千個字元的大型實體。該攻擊不如指數擴展那麼有效率，但它不會觸發那些用來防止深度巢狀實體的剖析器對策。

解壓縮炸彈 (decompression bomb)

  解壓縮炸彈（又名 ZIP bomb）適用於所有可以剖析壓縮 XML 串流（例如 gzip 壓縮的 HTTP 串流或 LZMA 壓縮檔案）的 XML 函式庫。對於攻擊者來說，它可以將傳輸的資料量減少三個或更多數量級。

大型 token

  Expat 需要重新剖析未完成的 token；如果沒有 Expat 2.6.0 中引入的保護，這可能會導致二次 runtime 而導致剖析 XML 的應用程式出現阻斷服務。此問題記錄於 CVE 2023-52425。