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。