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**。
