
2024年七大最佳免費(fèi)貨幣轉(zhuǎn)換API
現(xiàn)在您對(duì) XXE 注入有了基本的了解,讓我們來(lái)看一個(gè)例子。這是一個(gè)包含用戶名 XML 元素的示例 XML 文檔:
<?xml version="1.0" encoding="ISO-8859-1"?>
<username>John</username>
</xml>
非常無(wú)害且簡(jiǎn)單,對(duì)吧?外部實(shí)體在哪里?
首先,可以使用 DOCTYPE 標(biāo)頭內(nèi)的系統(tǒng)標(biāo)識(shí)符添加外部 XML 實(shí)體。此標(biāo)頭基本上為 XML 文件結(jié)構(gòu)添加了幾個(gè)屬性。
例如,下面的代碼包含一個(gè)外部 XML 實(shí)體,它將獲取 /etc/passwrd 的內(nèi)容并將其顯示給按用戶名呈現(xiàn)的用戶:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwrd" >]>
<username>&xxe;</username>
</xml>
哎呀!
這些實(shí)體可以訪問(wèn)您服務(wù)器中的本地或遠(yuǎn)程內(nèi)容,如果您在服務(wù)器上保存敏感文件,這將非常糟糕,因?yàn)樗鼈兛赡軙?huì)為攻擊者提供控制您網(wǎng)站的途徑。
類似地,其他 XML 外部實(shí)體攻擊可以訪問(wèn)本地資源,并且可能不會(huì)止步于返回?cái)?shù)據(jù)。因此,這也是影響應(yīng)用程序可用性并導(dǎo)致拒絕服務(wù)的途徑。
幸運(yùn)的是,緩解 XML 外部實(shí)體漏洞相對(duì)簡(jiǎn)單。只要您不是故意嘗試打開(kāi)漏洞窗口,并且認(rèn)為您需要用戶提供的 XML 文件的功能,您就不必太擔(dān)心。
如前所述,如果應(yīng)用程序具有解析 XML 文件的端點(diǎn),攻擊者可以向服務(wù)器發(fā)送特制的有效負(fù)載并獲取敏感文件。攻擊者可以訪問(wèn)的文件在很大程度上取決于您如何設(shè)置系統(tǒng)以及如何實(shí)現(xiàn)用戶權(quán)限。因此,為了防止這種情況,首先,不要使用支持實(shí)體替換的庫(kù),如 LibXML。
遺憾的是,NodeJS 沒(méi)有內(nèi)置 XML 解析引擎。您可能已經(jīng)在項(xiàng)目中使用此庫(kù)。但不要擔(dān)心 – 默認(rèn)情況下禁用實(shí)體替換。盡管如此,我們建議您明確禁用此功能。您可以通過(guò)簡(jiǎn)單地更改庫(kù)的所有初始化來(lái)做到這一點(diǎn),如下所示:
const lib = libxmljs.parseXml(xml, {noent: true});
還需要牢記的是,如果您決定采用這種方式,您仍然可能容易受到 DDoS 攻擊。
現(xiàn)在,假設(shè)您的應(yīng)用程序?qū)嶋H上利用外部實(shí)體來(lái)實(shí)現(xiàn)某些關(guān)鍵功能。在這種情況下,您可以采取一種方法來(lái)最大限度地降低漏洞利用的可能性,那就是將已知的外部實(shí)體列入安全列表。您只需在使用庫(kù)解析 XML 文件文檔之前檢查其中是否有包含不在列表中的任何實(shí)體的字符串即可。
app.post('/load_xml', upload.single('xml'), async function (req, res) {
if (!req.file) {
res.sendStatus(500);
return;
}
try {
const xml = req.file.buffer;
const doc = libxmljs.parseXml(xml, {noent: true});
if (doc.text().includes("<!ENTITY")) {
throw new Error("INVALID XML FILE");
}
res.send(doc.text());
} catch (err) {
res.send(err.toString());
res.sendStatus(500);
}
});
最后——我想強(qiáng)調(diào)這一點(diǎn)——如果應(yīng)用程序不需要解析 XML,請(qǐng)不要解析。我知道解析 XML 可能會(huì)很方便,并允許平臺(tái)為用戶提供便捷的功能。即便如此,仍有許多方法可以在不使用這些庫(kù)的情況下提供類似的功能。
最后,最好的緩解策略是絕不要對(duì)漏洞敞開(kāi)大門(mén)。務(wù)必記住,為用戶提供強(qiáng)大而安全的平臺(tái)正變得越來(lái)越復(fù)雜。這樣的工作需要投入大量的時(shí)間和專業(yè)知識(shí),而您的組織可能無(wú)法承擔(dān)。
保護(hù)您的平臺(tái)免受網(wǎng)絡(luò)上最復(fù)雜的攻擊需要對(duì)技術(shù)有廣泛的了解,并牢牢掌握平臺(tái)的基礎(chǔ)架構(gòu)。值得慶幸的是,用于構(gòu)建基礎(chǔ)架構(gòu)的大多數(shù)工具和庫(kù)都非常強(qiáng)大和安全。無(wú)論如何,工程師無(wú)意中引入漏洞并危及團(tuán)隊(duì)工作的可能性始終存在。
文章來(lái)源:NodeJS XML External Entities Guide: Examples and Prevention
2024年七大最佳免費(fèi)貨幣轉(zhuǎn)換API
如何通過(guò)Smart Image Cropping API自動(dòng)裁剪圖像?
News API + React:創(chuàng)建一個(gè)卓越的實(shí)時(shí)新聞應(yīng)用程序
30款免費(fèi)開(kāi)放的API,助力營(yíng)銷(xiāo)人員與內(nèi)容開(kāi)發(fā)者
免費(fèi)獲取韻達(dá)快遞查詢API的使用指南
OpenAI ChatGPT API 與 React JS 的完美結(jié)合:全面指南
面向營(yíng)銷(xiāo)人員的 API:前 7 名免費(fèi) REST API
常用文檔轉(zhuǎn)換API匯總
2024年國(guó)內(nèi)熱門(mén)天氣環(huán)境API
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)