
免費(fèi)YAML格式校驗(yàn)API的使用指南與集成教程
通過(guò)單獨(dú)的函數(shù)調(diào)用,您可以自動(dòng)生成鹽和哈希,如下所示。
bcrypt.hash(PlainPassword, saltRounds, function(err, hash) {
// Store password hash in database
});
可以使用下面的代碼塊檢查密碼的正確性。當(dāng)散列密碼與純密碼匹配時(shí),該函數(shù)返回true 。
// Load hash from your password DB.
bcrypt.compare(PlainPassword, hash, function(err, result) {
// result == true
});
列表中的下一個(gè)是 Validator,它是一個(gè)輸入驗(yàn)證模塊。它強(qiáng)制要求用戶(hù)輸入符合要求。同樣,它確保輸入的正確性。此列表包括您可以使用 Validator 包配置的所有驗(yàn)證器。
提高 Node.js 應(yīng)用安全性的另一種方法是集成 ESLint,這是一個(gè) linting 安全插件,可幫助在開(kāi)發(fā)過(guò)程中識(shí)別易受攻擊的 Node.js 代碼。易受攻擊的代碼實(shí)現(xiàn)包括不安全的正則表達(dá)式、for循環(huán)內(nèi)的“await”關(guān)鍵字等。
無(wú)論您使用 Node.js 構(gòu)建什么應(yīng)用程序,都應(yīng)該在開(kāi)發(fā)的第一階段執(zhí)行關(guān)鍵的安全程序。
因此,為了保證 Node.js 應(yīng)用程序安全且沒(méi)有漏洞,在構(gòu)建 Node.js 應(yīng)用程序時(shí)實(shí)施必要的安全最佳實(shí)踐非常重要。我們將在本節(jié)中介紹其中的幾個(gè)。
首先,始終審核您在項(xiàng)目中使用的每個(gè)節(jié)點(diǎn)模塊以進(jìn)行漏洞檢查是必不可少的。審核有助于確認(rèn)哪些軟件包可以升級(jí)。當(dāng)您審核軟件包時(shí),您也在確認(rèn)軟件包的安全性。
因此,為了審核包/模塊并檢查易受攻擊的依賴(lài)項(xiàng),您可以使用 Snyk、Node Security Project (NSP) 等工具,或運(yùn)行 npm-audit 來(lái)追蹤和修補(bǔ)漏洞。
其次,暴力破解之類(lèi)的攻擊是 Node.js 應(yīng)用常見(jiàn)的安全威脅,而登錄路由是這種攻擊最常針對(duì)的目標(biāo)。速率限制有助于限制暴力破解攻擊的影響。Node.js ratelimiter包有助于將速率限制集成到您的 Node.js 應(yīng)用中。使用 ratelimiter 模塊,您可以根據(jù)用戶(hù)的 ID 限制中間件的實(shí)現(xiàn)。
var id = req.user._id;
var limit = new Limiter({ id: id, db: db });
limit.get(function(err, limit){
if (err) return next(err);
res.set('X-RateLimit-Limit', limit.total);
res.set('X-RateLimit-Remaining', limit.remaining - 1);
res.set('X-RateLimit-Reset', limit.reset);
// looks good
debug('remaining %s/%s %s', limit.remaining - 1, limit.total, id);
if (limit.remaining) return next();
// does not look good
var delta = (limit.reset * 1000) - Date.now() | 0;
var after = limit.reset - (Date.now() / 1000) | 0;
res.set('Retry-After', after);
res.send(429, 'Rate limit exceeded, retry in ' + ms(delta, { long: true }));
});
Express Brute軟件包還可以進(jìn)行速率限制,以減輕暴力破解和拒絕服務(wù) (DoS) 攻擊。
第三,在將數(shù)據(jù)從一層傳輸?shù)搅硪粚訒r(shí),數(shù)據(jù)保密性非常重要,以防止?jié)撛诠粽叩男崽健Mㄟ^(guò)加密保護(hù)數(shù)據(jù)傳輸?shù)囊环N常見(jiàn)方法是使用傳輸層安全性 (TLS) 和安全套接字層 (SSL)。需要澄清的是,SSL 對(duì)客戶(hù)端-服務(wù)器連接進(jìn)行端到端加密,而 TLS 保護(hù)密碼數(shù)據(jù)和信用卡詳細(xì)信息等敏感信息。
此外,為了避免跨站點(diǎn)腳本 (XSS) 等注入攻擊,輸出轉(zhuǎn)義起著關(guān)鍵作用。本文后面將解釋 XSS。要轉(zhuǎn)義代碼中的輸出,您可以使用Node ES API 庫(kù)或Escape HTML 庫(kù)來(lái)轉(zhuǎn)義用戶(hù)可以訪問(wèn)的所有 JavaScript 和 HTML 代碼。
最后,服務(wù)器上的負(fù)載可能會(huì)導(dǎo)致 DoS,從而導(dǎo)致應(yīng)用程序停機(jī)。因此,監(jiān)控服務(wù)器的傳入和傳出流量非常重要,當(dāng)服務(wù)器處于極端負(fù)載時(shí),您可以隨時(shí)收到警報(bào)。如果您的服務(wù)器不是因?yàn)闃O端負(fù)載而崩潰,而是由于安全攻擊,則必須正確使用日志來(lái)了解安全攻擊發(fā)生的方式和時(shí)間。Bunyan Node.js模塊有助于高效記錄您的 Node.js 服務(wù)。TooBusy Node.js 模塊是監(jiān)控 Node.js 應(yīng)用程序的重要工具 。
OWASP Node.js 安全備忘單包含全面的安全最佳實(shí)踐列表。了解安全攻擊以及緩解這些攻擊的主要方法是安全的關(guān)鍵,這也是下一節(jié)的內(nèi)容。
Node.js 有幾種安全攻擊,但我們將在本部分詳細(xì)回顧常見(jiàn)的攻擊。
SQL 注入涉及通過(guò)用戶(hù)輸入的數(shù)據(jù)向應(yīng)用程序插入 SQL 查詢(xún)。這些攻擊利用應(yīng)用程序中要求用戶(hù)輸入的區(qū)域。實(shí)施 SQL 注入攻擊的攻擊者在成功攻擊后將能夠訪問(wèn)應(yīng)用程序的數(shù)據(jù)庫(kù)。您可以在 StackHawk 上閱讀有關(guān) SQL 注入的更多信息。
為了防止注入攻擊,輸入驗(yàn)證是關(guān)鍵,上面提到的 Validator 包有助于進(jìn)行正確的輸入驗(yàn)證。Validator 模塊具有允許列表和阻止列表驗(yàn)證方法,這些方法用于明確聲明您希望在輸入驗(yàn)證過(guò)程中授權(quán)的內(nèi)容并阻止其他所有內(nèi)容。
XSS涉及將客戶(hù)端腳本注入網(wǎng)站。利用 XSS,攻擊者能夠操縱 Web 應(yīng)用程序,目的是向 Web 應(yīng)用程序的用戶(hù)發(fā)送惡意代碼。XSS 攻擊的目的是竊取用戶(hù)的數(shù)據(jù)或控制 Web 應(yīng)用程序。
為了防止 XSS 攻擊,你需要根據(jù)項(xiàng)目需求使用安全的 HTTP 標(biāo)頭。上面提到的 Helmet 提供了設(shè)置安全 HTTP 標(biāo)頭的中間件函數(shù)。
命令注入是指注入輸入,改變易受攻擊的應(yīng)用程序中的有效合法命令,以便執(zhí)行針對(duì)操作系統(tǒng)的非法命令。這種攻擊主要針對(duì)系統(tǒng) shell。輸入注入??可以來(lái)自用戶(hù)可以修改的任何來(lái)源,例如表單。這種攻擊以系統(tǒng) shell 為目標(biāo)。
再次強(qiáng)調(diào),為了防止注入攻擊,輸入驗(yàn)證是關(guān)鍵。
CSRF是一種會(huì)話(huà)劫持形式,用戶(hù)被迫在當(dāng)前已通過(guò)身份驗(yàn)證的應(yīng)用程序上運(yùn)行惡意操作。在 CSRF 攻擊中,攻擊者劫持真實(shí)用戶(hù)的會(huì)話(huà),從而繞過(guò)非用戶(hù)的安全規(guī)則。
為了防止CSRF 攻擊,您需要實(shí)現(xiàn)將在服務(wù)器端生成的令牌。csurf Node.js 包有助于生成有效的 CSRF 令牌。OWASP還提供了生成令牌的最佳實(shí)踐。
路徑遍歷是指由于安全驗(yàn)證薄弱而非法訪問(wèn)文件服務(wù)器中的目錄的行為。在這種攻擊中,攻擊者能夠通過(guò)向 Web 應(yīng)用程序注入惡意用戶(hù)輸入來(lái)訪問(wèn)服務(wù)器文件。這種攻擊利用了訪問(wèn)控制設(shè)置的易受攻擊的實(shí)現(xiàn)。
為了防止這種形式的攻擊,允許列表起著關(guān)鍵作用。輸入驗(yàn)證也起著至關(guān)重要的作用。
在本指南中,您了解了 Node.js 中的安全要點(diǎn)、可用于緩解漏洞攻擊的軟件包和庫(kù),以及加強(qiáng) Node.js 應(yīng)用安全性的最佳實(shí)踐。當(dāng)然,安全性應(yīng)該是開(kāi)發(fā)過(guò)程中的首要任務(wù),并融入到您下一個(gè) Node.js 應(yīng)用的各個(gè)方面。
文章來(lái)源:Guide to Security in Node.js
免費(fèi)YAML格式校驗(yàn)API的使用指南與集成教程
如何免費(fèi)調(diào)用微博熱搜API獲取最新熱門(mén)話(huà)題
小紅書(shū)違禁詞替換API的免費(fèi)版與付費(fèi)版對(duì)比
免費(fèi)API深度求索之路:獲取、調(diào)用與應(yīng)用
面向開(kāi)發(fā)人員的 8 個(gè)最佳區(qū)塊鏈 API
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ā)者
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)