XML 處理模組

原始碼:Lib/xml/


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

備註

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

請務必注意 xml 套件中的模組要求至少有一個可用的 SAX 相容 XML 剖析器。Expat 剖析器包含在 Python 中,所以總是可以使用 xml.parsers.expat 模組。

xml.domxml.sax 套件的文件為 DOM 和 SAX 介面的 Python 繫結的定義。

以下是 XML 處理子模組:

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