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 功能進行拒絕服務攻擊,訪問本地檔案,生成到其他機器的網路連線,或繞過防火牆。
低於 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。