新聞中心
XML處理模塊
源碼:Lib/xml/

創(chuàng)新互聯(lián)是一家專業(yè)提供漳縣企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、成都做網(wǎng)站、HTML5、小程序制作等業(yè)務(wù)。10年已為漳縣眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
用于處理XML的python接口分組在 xml 包中。
警告
XML 模塊對(duì)于錯(cuò)誤或惡意構(gòu)造的數(shù)據(jù)是不安全的。 如果你需要解析不受信任或未經(jīng)身份驗(yàn)證的數(shù)據(jù),請參閱 XML 漏洞 和 defusedxml 包 部分。
值得注意的是 xml 包中的模塊要求至少有一個(gè) SAX 兼容的 XML 解析器可用。在 Python 中包含 Expat 解析器,因此 xml.parsers.expat 模塊將始終可用。
xml.dom 和 xml.sax 包的文檔是 DOM 和 SAX 接口的 Python 綁定的定義。
XML 處理子模塊包括:
-
xml.etree.ElementTree: ElementTree API,一個(gè)簡單而輕量級(jí)的XML處理器
-
xml.dom:DOM API 定義
-
xml.dom.minidom:最小的 DOM 實(shí)現(xiàn)
-
xml.dom.pulldom:支持構(gòu)建部分 DOM 樹
-
xml.sax:SAX2 基類和便利函數(shù)
-
xml.parsers.expat:Expat解析器綁定
XML 漏洞
XML 處理模塊對(duì)于惡意構(gòu)造的數(shù)據(jù)是不安全的。 攻擊者可能濫用 XML 功能來執(zhí)行拒絕服務(wù)攻擊、訪問本地文件、生成與其它計(jì)算機(jī)的網(wǎng)絡(luò)連接或繞過防火墻。
下表概述了已知的攻擊以及各種模塊是否容易受到攻擊。
|
種類 |
sax |
etree |
minidom |
pulldom |
xmlrpc |
|---|---|---|---|---|---|
|
billion laughs |
易受攻擊(1) |
易受攻擊(1) |
易受攻擊(1) |
易受攻擊(1) |
易受攻擊(1) |
|
quadratic blowup |
易受攻擊(1) |
易受攻擊(1) |
易受攻擊(1) |
易受攻擊(1) |
易受攻擊(1) |
|
external entity expansion |
安全 (5) |
安全 (2) |
安全 (3) |
安全 (5) |
安全 (4) |
|
DTD retrieval |
安全 (5) |
安全 |
安全 |
安全 (5) |
安全 |
|
decompression bomb |
安全 |
安全 |
安全 |
安全 |
易受攻擊 |
-
Expat 2.4.1 及更新的版本不易受 “billion laughs” 和 “quadratic blowup” 漏洞的攻擊。 因?yàn)榭赡芤蕾囅到y(tǒng)提供的庫而仍被列為易受攻擊的項(xiàng)目。 請檢查
pyexpat.EXPAT_VERSION。 -
xml.etree.ElementTree 不會(huì)擴(kuò)展外部實(shí)體并在實(shí)體發(fā)生時(shí)引發(fā)
ParserError。 -
xml.dom.minidom 不會(huì)擴(kuò)展外部實(shí)體,只是簡單地返回未擴(kuò)展的實(shí)體。
-
xmlrpclib不擴(kuò)展外部實(shí)體并省略它們。 -
從 Python 3.7.1 開始,默認(rèn)情況下不再處理外部通用實(shí)體。
billion laughs / exponential entity expansion (狂笑/遞歸實(shí)體擴(kuò)展)
Billion Laughs 攻擊 — 也稱為遞歸實(shí)體擴(kuò)展 — 使用多級(jí)嵌套實(shí)體。 每個(gè)實(shí)體多次引用另一個(gè)實(shí)體,最終實(shí)體定義包含一個(gè)小字符串。 指數(shù)級(jí)擴(kuò)展導(dǎo)致幾千 GB 的文本,并消耗大量內(nèi)存和 CPU 時(shí)間。
quadratic blowup entity expansion(二次爆炸實(shí)體擴(kuò)展)
A quadratic blowup attack is similar to a Billion Laughs attack; it abuses entity expansion, too. Instead of nested entities it repeats one large entity with a couple of thousand chars over and over again. The attack isn’t as efficient as the exponential case but it avoids triggering parser countermeasures that forbid deeply nested entities.
external entity expansion
實(shí)體聲明可以包含的不僅僅是替換文本。 它們還可以指向外部資源或本地文件。 XML 解析器訪問資源并將內(nèi)容嵌入到 XML 文檔中。
DTD retrieval
Python 的一些 XML 庫 xml.dom.pulldom 從遠(yuǎn)程或本地位置檢索文檔類型定義。 該功能與外部實(shí)體擴(kuò)展問題具有相似的含義。
decompression bomb
Decompression bombs(解壓炸彈,又名 ZIP bomb)適用于所有可以解析壓縮 XML 流(例如 gzip 壓縮的 HTTP 流或 LZMA 壓縮的文件)的 XML 庫。 對(duì)于攻擊者來說,它可以將傳輸?shù)臄?shù)據(jù)量減少三個(gè)量級(jí)或更多。
PyPI上 defusedxml 的文檔包含有關(guān)所有已知攻擊向量的更多信息以及示例和參考。
defusedxml 包
defusedxml 是一個(gè)純 Python 軟件包,它修改了所有標(biāo)準(zhǔn)庫 XML 解析器的子類,可以防止任何潛在的惡意操作。 對(duì)于解析不受信任的XML數(shù)據(jù)的任何服務(wù)器代碼,建議使用此程序包。 該軟件包還提供了有關(guān)更多 XML 漏洞(如 XPath 注入)的示例漏洞和擴(kuò)展文檔。
網(wǎng)頁標(biāo)題:創(chuàng)新互聯(lián)Python教程:XML處理模塊
標(biāo)題來源:http://fisionsoft.com.cn/article/cdddeop.html


咨詢
建站咨詢
