我们如何信任npm模块?

时间:2016-08-31 05:04:07

标签: javascript node.js security npm node-modules

我通过npm包管理器使用了很多Node.js模块。由于这些模块不是由值得信赖的组织开发的,它们是否值得信赖?

我不知道npm团队是否对开发人员提交的每个模块进行了任何安全检查。

8 个答案:

答案 0 :(得分:9)

NPM没有做任何检查。他们只是一个注册表。 整个事情建立在开发社区的信任和分享上。

大多数节点模块都是开源的,你可以在他们的存储库(通常是github)中查看他们的代码。 这是“信任”他们的最佳方式。 一些节点模块为您提供预构建的本机二进制文件,因此在某种程度上可能存在风险,但如果它很受欢迎(例如ws),那么我认为没有问题。 您还可以查看npm发布者用户,该用户有时候是像oracle这样的知名公司。

答案 1 :(得分:1)

我们的想法是找到最受欢迎的npm模块。你可以通过检查每个项目的星星来做到这一点。

一些提示:

  

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

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

  

在开发存储库中使用npm shrinkwrap并检查结果。这将锁定您的模块版本,包括子依赖项

更多详情here

答案 2 :(得分:1)

有一些程序可以从npm获得,可以针对你的package.json运行并检查已知的漏洞。不完美,但是一个很好的开始。我使用的那个叫做nsp但还有其他人。

答案 3 :(得分:1)

您可以使用nsp提供的Node Security Platform工具,这有助于审核package.json中的所有模块

npm install nsp --global
nsp check

更多信息在这里:https://nodesecurity.io/opensource

答案 4 :(得分:0)

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

答案 5 :(得分:0)

它不是很安全,因为这些模块不是像php / apache那样的任何组织开发的,但它是很好的技术,你也可以使用nsp模块来检查你的节点模块中的安全问题。

More info

答案 6 :(得分:0)

实际上我并没有使用太多的包裹:

1)表示
2)身体和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 (:

答案 7 :(得分:-1)

如果要安装不信任的软件包,可以通过运行

来避免此漏洞

npm install --ignore-scripts

有关详情,请查看here

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