XML處理模塊?

源碼: Lib/xml/


用于處理XML的Python接口分組在 xml 包中。

警告

XML 模塊對(duì)于錯(cuò)誤或惡意構(gòu)造的數(shù)據(jù)是不安全的。 如果你需要解析不受信任或未經(jīng)身份驗(yàn)證的數(shù)據(jù),請(qǐng)參閱 XML 漏洞defusedxml 包 部分。

值得注意的是 xml 包中的模塊要求至少有一個(gè) SAX 兼容的 XML 解析器可用。在 Python 中包含 Expat 解析器,因此 xml.parsers.expat 模塊將始終可用。

xml.domxml.sax 包的文檔是 DOM 和 SAX 接口的 Python 綁定的定義。

XML 處理子模塊包括:

XML 漏洞?

XML 處理模塊對(duì)于惡意構(gòu)造的數(shù)據(jù)是不安全的。 攻擊者可能濫用 XML 功能來(lái)執(zhí)行拒絕服務(wù)攻擊、訪問(wèn)本地文件、生成與其它計(jì)算機(jī)的網(wǎng)絡(luò)連接或繞過(guò)防火墻。

下表概述了已知的攻擊以及各種模塊是否容易受到攻擊。

種類(lèi)

sax

etree

minidom

pulldom

xmlrpc

billion laughs

Vulnerable (1)

Vulnerable (1)

Vulnerable (1)

Vulnerable (1)

Vulnerable (1)

quadratic blowup

Vulnerable (1)

Vulnerable (1)

Vulnerable (1)

Vulnerable (1)

Vulnerable (1)

external entity expansion

Safe (5)

Safe (2)

Safe (3)

Safe (5)

安全 (4)

DTD retrieval

Safe (5)

安全

安全

Safe (5)

安全

decompression bomb

安全

安全

安全

安全

易受攻擊

  1. Expat 2.4.1 and newer is not vulnerable to the "billion laughs" and "quadratic blowup" vulnerabilities. Items still listed as vulnerable due to potential reliance on system-provided libraries. Check pyexpat.EXPAT_VERSION.

  2. xml.etree.ElementTree 不會(huì)擴(kuò)展外部實(shí)體并在實(shí)體發(fā)生時(shí)引發(fā) ParserError。

  3. xml.dom.minidom 不會(huì)擴(kuò)展外部實(shí)體,只是簡(jiǎn)單地返回未擴(kuò)展的實(shí)體。

  4. xmlrpclib 不擴(kuò)展外部實(shí)體并省略它們。

  5. 從 Python 3.7.1 開(kāi)始,默認(rèn)情況下不再處理外部通用實(shí)體。

billion laughs / exponential entity expansion (狂笑/遞歸實(shí)體擴(kuò)展)

Billion Laughs 攻擊 -- 也稱(chēng)為遞歸實(shí)體擴(kuò)展 -- 使用多級(jí)嵌套實(shí)體。 每個(gè)實(shí)體多次引用另一個(gè)實(shí)體,最終實(shí)體定義包含一個(gè)小字符串。 指數(shù)級(jí)擴(kuò)展導(dǎo)致幾千 GB 的文本,并消耗大量?jī)?nèi)存和 CPU 時(shí)間。

quadratic blowup entity expansion(二次爆炸實(shí)體擴(kuò)展)

二次爆炸攻擊類(lèi)似于 Billion Laughs 攻擊,它也濫用實(shí)體擴(kuò)展。 它不是嵌套實(shí)體,而是一遍又一遍地重復(fù)一個(gè)具有幾千個(gè)字符的大型實(shí)體。攻擊不如遞歸情況有效,但它避免觸發(fā)禁止深度嵌套實(shí)體的解析器對(duì)策。

external entity expansion

實(shí)體聲明可以包含的不僅僅是替換文本。 它們還可以指向外部資源或本地文件。 XML 解析器訪問(wèn)資源并將內(nèi)容嵌入到 XML 文檔中。

DTD retrieval

Python 的一些 XML 庫(kù) xml.dom.pulldom 從遠(yuǎn)程或本地位置檢索文檔類(lèi)型定義。 該功能與外部實(shí)體擴(kuò)展問(wèn)題具有相似的含義。

decompression bomb

Decompression bombs(解壓炸彈,又名 ZIP bomb)適用于所有可以解析壓縮 XML 流(例如 gzip 壓縮的 HTTP 流或 LZMA 壓縮的文件)的 XML 庫(kù)。 對(duì)于攻擊者來(lái)說(shuō),它可以將傳輸?shù)臄?shù)據(jù)量減少三個(gè)量級(jí)或更多。

PyPI上 defusedxml 的文檔包含有關(guān)所有已知攻擊向量的更多信息以及示例和參考。

defusedxml?

defusedxml 是一個(gè)純 Python 軟件包,它修改了所有標(biāo)準(zhǔn)庫(kù) XML 解析器的子類(lèi),可以防止任何潛在的惡意操作。 對(duì)于解析不受信任的XML數(shù)據(jù)的任何服務(wù)器代碼,建議使用此程序包。 該軟件包還提供了有關(guān)更多 XML 漏洞(如 XPath 注入)的示例漏洞和擴(kuò)展文檔。