我通过npm包管理器使用了很多Node.js模块。由于这些模块不是由值得信赖的组织开发的,它们是否值得信赖?
我不知道npm团队是否对开发人员提交的每个模块进行了任何安全检查。
答案 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
答案 4 :(得分:0)
是的!几乎所有节点模块都是开源的,因此您可以实际查看在模块后面运行的代码片段。这可能有助于您建立对您愿意在应用程序中使用的包的信任
答案 5 :(得分:0)
它不是很安全,因为这些模块不是像php / apache那样的任何组织开发的,但它是很好的技术,你也可以使用nsp
模块来检查你的节点模块中的安全问题。
答案 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)