XML 處理模組

原始碼: Lib/xml/


Python 用於處理 XML 的介面都歸入 xml 包中。

備註

如果您需要解析不受信任或未經身份驗證的資料,請參閱 XML 安全

需要注意的是,xml 包中的模組要求至少有一個符合 SAX 標準的 XML 解析器可用。Expat 解析器隨 Python 一起提供,因此 xml.parsers.expat 模組將始終可用。

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

XML 處理子模組包括

XML 安全

攻擊者可以濫用 XML 功能進行拒絕服務攻擊,訪問本地檔案,生成到其他機器的網路連線,或繞過防火牆。

低於 2.6.0 版本的 Expat 可能容易受到“十億笑”、“二次膨脹”和“大令牌”漏洞的影響。如果 Python 使用舊版本的 Expat 作為系統提供的庫,則可能容易受到攻擊。請檢查 pyexpat.EXPAT_VERSION

xmlrpc 容易受到“解壓縮炸彈”攻擊。

十億笑 / 指數實體擴充套件

十億笑攻擊——也稱為指數實體擴充套件——使用多層巢狀實體。每個實體多次引用另一個實體,最終的實體定義包含一個小的字串。指數擴充套件導致數千兆位元組的文字,並消耗大量記憶體和 CPU 時間。

二次膨脹實體擴充套件

二次膨脹攻擊類似於十億笑攻擊;它也濫用實體擴充套件。它不是巢狀實體,而是重複一個包含幾千個字元的大實體。這種攻擊不如指數情況有效,但它避免了觸發禁止深度巢狀實體的解析器對策。

解壓縮炸彈

解壓縮炸彈(又稱 ZIP 炸彈)適用於所有可以解析壓縮 XML 流的 XML 庫,例如 gzipped HTTP 流或 LZMA 壓縮檔案。對於攻擊者來說,它可以將傳輸的資料量減少三個數量級或更多。

大令牌

Expat 需要重新解析未完成的令牌;如果沒有 Expat 2.6.0 中引入的保護,這可能會導致二次執行時,可用於導致解析 XML 的應用程式的拒絕服務。此問題被稱為 CVE 2023-52425