簡體   English   中英

我們如何信任 npm 模塊?

[英]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 ,它允許您在使用nodenpmyarn時使用本機 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腳本和其他方式危害您的系統。

如果要安裝不信任的軟件包,則可以通過運行來避免此漏洞

npm install --ignore-scripts

有關詳細信息,請點擊此處

這是一個很棒的博客,可以給你清晰的圖片博客

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM