我们如何信任 npm 模块?

问题描述 投票:0回答:9

我通过 npm 包管理器使用许多 Node.js 模块。既然这些模块不是由受信任的组织开发的,那么它们值得信赖吗?

不知道npm团队是否对开发者提交的每个模块都做了安全检查。

javascript node.js security npm node-modules
9个回答
16
投票

NPM 不进行任何检查。它们只是一个注册表。 整个事情建立在对开发社区的信任和共享的基础上。

大多数节点模块都是开源的,您可以在其存储库(通常是 Github)中查看它们的代码。 所以这是“信任”他们的最佳方式。 某些节点模块为您提供预构建的本机二进制文件,因此这在某种程度上可能会带来更大的风险,但如果它很流行(例如 ws),那么我认为没有问题。 您还可以检查 NPM 发布者用户,有时是 Oracle 等知名公司。


5
投票

这个想法是找到最流行的

npm
模块。您可以通过检查每个项目的星级来做到这一点。

一些提示:

使用 npm 来管理开发环境中的依赖项,但不能管理部署脚本中的依赖项。

像npm这样的工具是开发工具。它们是下载和更新模块的便捷方式。它们不是部署工具,从来都不是部署工具,也不应该用于部署!

在开发存储库中使用

npm shrinkwrap
并签入结果。这会将您的模块版本锁定到位,包括子依赖项

更多详情这里


3
投票

更新 - 2019 年 6 月

npm@6 中包含安全检查。 您可以运行

npm audit
来递归分析依赖关系树,以识别已知不安全的模块。

2016版

您可以使用

nsp
提供的
Node Security Platform
工具,它有助于审核package.json中的所有模块

npm install nsp --global
nsp check

1
投票

npm 提供了一些程序,可以针对您的 package.json 运行并检查已知漏洞。 并不完美,但却是一个良好的开始。 我用过的那个叫做 nsp 但还有其他的。


1
投票

它不太安全,因为这些模块不是由像 php/apache 那样的任何组织开发的,但是它是很好的技术,您也可以使用

nsp 
模块来检查节点模块中的安全问题。


0
投票

是的!几乎所有节点模块都是开源的,因此您可以实际查看模块后面运行的代码片段。这可能会帮助您建立对您愿意在应用程序中使用的软件包的信任


0
投票

其实我用的包不多:

1)快递
2)body & cookie-parser(有时我懒得写中间件),
3)猫鼬,
4)哈巴狗,
5)请求,
6) 异步,
7) 洛达什,
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)存储库中没有最近的迭代(提交)

顺便说一句,我的申请中的

nsp check
说:
(+) No known vulnerabilities found
(:


0
投票

我制作了

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
脚本和其他方式危害您的系统。


-1
投票

如果您正在安装不信任的软件包,可以通过运行来避免此漏洞

npm install --ignore-scripts

了解更多详情请查看这里

这是一个很棒的博客,可以为您提供清晰的图片博客

© www.soinside.com 2019 - 2024. All rights reserved.