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 versions lower than 2.6.0 may be vulnerable to "billion laughs", "quadratic blowup" and "large tokens". Python may be vulnerable if it uses such older versions of Expat as a system-provided library. Check 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