[英]How can we trust npm modules?
我通過 npm 包管理器使用了許多 Node.js 模塊。 由於這些模塊不是由可信賴的組織開發的,它們是否值得信賴?
不知道npm 團隊有沒有對開發者提交的每個模塊做任何安全檢查。
NPM沒有做任何檢查。 他們只是一個注冊表。 整個事情建立在開發社區的信任和共享上。
大多數節點模塊都是開源的,您可以在其存儲庫(通常是Github)中查看其代碼。 這是“信任”他們的最佳方式。 一些節點模塊為您提供了預構建的本機二進制文件,因此在某種程度上可能會有風險,但如果它很受歡迎(例如ws ),那么我認為沒有問題。 您還可以檢查NPM發布者用戶,該用戶有時是Oracle等知名公司。
我們的想法是找到最受歡迎的npm
模塊。 你可以通過檢查每個項目的星星來做到這一點。
一些技巧:
使用npm管理開發環境中的依賴項,但不能在部署腳本中管理依賴項。
像npm這樣的工具是開發工具。 它們是下載和更新模塊的便捷方式。 它們不是部署工具,從未使用過部署工具,也不應該用於部署!
在開發存儲庫中使用
npm shrinkwrap
並檢查結果。 這將鎖定您的模塊版本,包括子依賴項
更多細節在這里
npm中有一些程序可以針對你的package.json運行並檢查已知的漏洞。 不完美,但是一個很好的開始。 我使用的那個叫做nsp,但還有其他的。
更新 - 2019年6月
在npm @ 6中包含安全檢查。 您可以運行npm audit
來遞歸分析您的依賴關系樹,以明確識別哪些是不安全的
2016版
您可以使用Node Security Platform
提供的nsp
工具,它有助於審核package.json中的所有模塊
npm install nsp --global
nsp check
更多信息請訪問: https : //nodesecurity.io/opensource
是的! 幾乎所有節點模塊都是開源的,因此您可以實際查看在模塊后面運行的代碼片段。 這可能有助於您建立對您願意在應用程序中使用的包的信任
它不是很安全,因為這些模塊不是像php / apache那樣的任何組織開發的,但它是很好的技術,你也可以使用nsp
模塊檢查你的節點模塊中的安全問題。
其實我不用太多包裹:
1)表達
2)body&cookie-parser(有時候我懶得寫中間件),
3)貓鼬,
4)哈巴狗,
5)請求,
6)異步,
7)lodash,
8)字符串
我寫的所有其他東西,並放在“組件”文件夾中。
讓我們說大多數人如此懶惰:
const md5 = require('md5');
let data = 'something';
data = md5(data);
但是我使用crypto
(默認情況下包含在所有nodejs版本中):
const crypto = require('crypto');
let data = 'something';
data = crypto
.createHash('md5')
.update(data.toString())
.digest('hex');
我保持邏輯不使用包:
1)如果包很小(我總是讀包文件,如果我的包不知道)
2)版本不高於1.0.0(不保證會更進一步)
3)存儲庫中沒有最近的迭代(提交)
btw我的應用程序的nsp check
說: (+) No known vulnerabilities found
(:
我制作了node-safe
,它允許您在使用node
、 npm
和yarn
時使用本機 macOS 沙箱:
# Allow reading files, but only in the current folder
node --enable-sandbox --allow-read="./**" myscript.js
# Run npm with sandbox (can only write to `./node_modules` by default)
npm --enable-sandbox install got
使用沙盒包管理器時,惡意依賴項無法再通過postinstall
腳本和其他方式危害您的系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.