LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

NodeJS路徑遍歷攻擊:示例及預(yù)防,如etc/passwd

freeflydom
2025年7月14日 9:12 本文熱度 827

  讓我們來看看什么是路徑遍歷攻擊,以及在Node.js中可以采用哪些方法來阻止這種攻擊。

  構(gòu)建一個(gè)安全而健壯的應(yīng)用程序需要考慮的因素很多,并非一件容易的事情。要確保覆蓋所有潛在的漏洞是一項(xiàng)十分艱巨的任務(wù),這需要大量的經(jīng)驗(yàn)和指導(dǎo)。在這些漏洞中,有一個(gè)和系統(tǒng)目錄訪問安全相關(guān)的漏洞,它通常會(huì)在程序進(jìn)行路徑遍歷時(shí)受到攻擊。

  理解這一點(diǎn)有助于你找到解決問題的辦法。網(wǎng)絡(luò)上有大量相關(guān)的資源可以幫助你解決該問題,本文只是諸多資源中的一個(gè)。

  本文旨在介紹路徑遍歷攻擊的原理,以及使用Node.js可以采取哪些方法來阻止這類攻擊。首先,我們將簡要介紹什么是路徑遍歷攻擊,然后將探討一些常見的示例,最后介紹如何修復(fù)這些漏洞。通過本文的介紹,你應(yīng)該對(duì)路徑訪問遍歷有一個(gè)基本的了解,并能夠在你的程序中阻止相關(guān)的漏洞。

  請(qǐng)注意,本文是專門針對(duì)Node.js開發(fā)人員的。因此,我們希望你對(duì)Node.js開發(fā)棧有一個(gè)基本的了解。如果你還沒有嘗試過,請(qǐng)查看Node.js指南以獲得更多的信息。

路徑遍歷介紹

  什么是路徑遍歷攻擊?它是一種利用服務(wù)器端糟糕的訪問控制漏洞而實(shí)現(xiàn)的攻擊,特別是對(duì)文件的訪問。在這類攻擊中,攻擊者試圖通過向應(yīng)用程序中注入無效或惡意的內(nèi)容來訪問服務(wù)器上受限制的文件。可以把它看作是SQL注入,但針對(duì)的是系統(tǒng)目錄而不是數(shù)據(jù)庫。

  很明顯,能夠訪問服務(wù)器上未經(jīng)授權(quán)的文件,其后果可想而知。攻擊者一旦獲取了這種權(quán)限,他就可以在我們的系統(tǒng)中造成非常嚴(yán)重的破壞,從而危及用戶信息。

  下面讓我們更加深入地研究導(dǎo)致此漏洞的原因,以及你的服務(wù)器運(yùn)行什么樣的系統(tǒng)是何等重要。現(xiàn)在,讓我們先看看幾個(gè)路徑遍歷攻擊的示例。

路徑遍歷攻擊示例

  你可能會(huì)問,一個(gè)典型的路徑遍歷攻擊是什么樣的?

  其實(shí)很簡單:

../../etc/passwd

  出乎你的預(yù)料,對(duì)嗎?

  路徑遍歷攻擊的核心思想就是找到一種方法,訪問開發(fā)人員和應(yīng)用程序不希望你訪問的文件夾。因此,如果你對(duì)如何訪問路徑和Linux命令行有所了解的話,你就可以在不受保護(hù)的應(yīng)用程序中進(jìn)行相應(yīng)的操作,從而實(shí)現(xiàn)路徑遍歷攻擊。

  下面是一些具體的例子。

相對(duì)路徑攻擊

  相對(duì)路徑攻擊本質(zhì)上就和我們上面所描述的一樣。如果應(yīng)用程序缺少有效的用戶輸入驗(yàn)證,攻擊者可以利用該漏洞試圖訪問服務(wù)器中受限制的文件。這樣情況下,passwd文件中包含我們?cè)诜?wù)器上的密鑰就有可能被泄露。

  當(dāng)然,你可以增強(qiáng)用戶輸入驗(yàn)證,以減輕這種漏洞所帶來的風(fēng)險(xiǎn)。一種簡單的方法是使用path.normalize()并對(duì)用戶輸入進(jìn)行特殊字符過濾——順便說一下,你應(yīng)該始終對(duì)用戶輸入的內(nèi)容進(jìn)行過濾和驗(yàn)證——這可以避免許多問題。

有毒的Null字節(jié)攻擊

  在HTTP請(qǐng)求中,通過在字符串的末尾添加NULL字節(jié)和\0,攻擊者可以繞開用戶輸入驗(yàn)證和過濾,從而訪問未經(jīng)授權(quán)的文件和目錄。

  那會(huì)是怎樣的呢?就像這樣:

/../../../../../../../../../../../../../../../../etc/passwd%00

  請(qǐng)注意末尾的%00。我們的驗(yàn)證程序最終可能會(huì)將其翻譯為\0.txt\0,從而允許訪問passwd文件。

  為了阻止此類攻擊,你只需要添加下面的代碼對(duì)用戶輸入的內(nèi)容進(jìn)行驗(yàn)證:

if (user_input.indexOf('\0') !== -1) {
return respond('Access denied');
}

  還算簡單,對(duì)吧?

  路徑遍歷攻擊其實(shí)并不復(fù)雜。正如我們前面所提到的,它依賴于糟糕的訪問控制邏輯的實(shí)現(xiàn)或者一些邊界值判斷。不過這些漏洞可能非常危險(xiǎn),我們應(yīng)該盡可能地阻止或減少這些漏洞的發(fā)生,好消息是要做到這一點(diǎn)并不難。

其它阻止Node.js中路徑遍歷攻擊的方法

  當(dāng)然,還有許多方法可以用來增強(qiáng)我們應(yīng)用程序的安全性。JavaScript已經(jīng)足夠成熟,它提供了大量的文檔用以指導(dǎo)我們采用不同的方法來減少攻擊,這里我將列出其中一部分。

路徑前綴驗(yàn)證

  在應(yīng)用程序中只允許某種級(jí)別的遍歷會(huì)怎么樣?在某些情況下,你可能希望應(yīng)用程序允許用戶在不同的文件夾中查找文件——例如,個(gè)人資料圖片和文章都存放在不同的文件夾中。你可以在代碼中進(jìn)行硬編碼來驗(yàn)證路徑字符串,就像請(qǐng)求特定資源時(shí)使用的變量一樣,但是這樣做可能導(dǎo)致前綴路徑遍歷攻擊。

  如果用戶被允許在應(yīng)用程序中輸入點(diǎn)和斜線等字符,那么攻擊者就可以自由地遍歷目錄。為了阻止這種情況的發(fā)生,我們需要驗(yàn)證用戶的輸入并過濾掉這些字符,或者直接顯示錯(cuò)誤信息。

白名單

  白名單是一種直接有效的方法,它可以減少漏洞被利用的可能性。當(dāng)然,你不能指望白名單一定能派上用場,但在需要的時(shí)候總是能起到一定的作用。

  一個(gè)簡單的例子是驗(yàn)證用戶輸入的內(nèi)容是否符合某個(gè)預(yù)定義的標(biāo)準(zhǔn)。例如,如果你規(guī)定應(yīng)用程序只允許創(chuàng)建和處理路徑中包含小寫字母和數(shù)字字符的文件,那么你就可以驗(yàn)證用戶輸入的內(nèi)容中只包含這類字符。

if (!/^[a-z0-9]+$/.test(user_input)) {
return respond('Access denied');
}

  通過添加以上驗(yàn)證方法,你可以針對(duì)惡意攻擊添加一層額外的防護(hù)。

路徑連接

  最后,我們將實(shí)現(xiàn)一個(gè)通用的驗(yàn)證方案,為我們可能面臨的所有這些漏洞提供一個(gè)較為健壯的方法,最終生成一個(gè)安全的路徑字符串。

  這個(gè)解決方案的代碼看起來是這樣的:

var root = '/var/www/';
exports.validatePath = (user_input) => {
if (user_input.indexOf('\0') !== -1) {
return 'Access denied';
}
if (!/^[a-z0-9]+$/.test(user_input)) {
return 'Access denied';
}
var path = require('path');
var safe_input = path.normalize(user_input).replace(/^(\.\.(\/|\\|$))+/, '');
var path_string = path.join(root, safe_input);
if (path_string.indexOf(root) !== 0) {
return 'Access denied';
}
return path_string;
}

  正如你所看到的,我們將前面討論過的所有檢查和驗(yàn)證方法合并到一起,包括可能對(duì)系統(tǒng)造成的任何風(fēng)險(xiǎn)。

寫在最后

  JavaScript是一種成熟而健壯的語言,因此有無數(shù)種方法可以解決這個(gè)問題。然而這些方法都不是最完美的,只有滿足你的需求并進(jìn)行了充分測試的方法才是最好的。

  雖然解決方法看起來很簡單,但要確保執(zhí)行良好的路徑遍歷安全策略十分重要。我們需要盡可能地覆蓋應(yīng)用程序中的潛在缺口。當(dāng)然,技術(shù)在不斷更新,將來會(huì)出現(xiàn)更強(qiáng)大、更全面的解決方案來防止此類問題的發(fā)生。只要我們的方法有效且具備創(chuàng)造性,我們總會(huì)堵住系統(tǒng)中存在的漏洞。

原文地址:Node.js Path Traversal Guide: Examples and Prevention

轉(zhuǎn)自https://www.cnblogs.com/jaxu/p/18179224


該文章在 2025/7/14 9:12:50 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲一区二区三区中文字幕 | 中文字幕日产乱码一区 | 久久悠悠色综合视频 | 一本一本久久a久久精品 | 亚洲欧美日韩专区一 | 最新亚洲日韩一区二区 |