NodeJS和NPM:包安全性

PRS*_*PRS 7 javascript security node.js npm

鉴于NodeJS的流行程度以及NPM的工作原理......确保您永远不会安装不安全/恶意软件包的最佳方法是什么?对我而言,这似乎是架构中一个巨大的漏洞,完全依赖于用户评论,对StackOverflow等网站的评论,个人博客等等.我做了一些搜索,我似乎找到的只是一个"计划"一旦提出投诉,说用户违反了行为准则,就会删除违规用户.

NPM行为准则 https://www.npmjs.com/policies/conduct

以下是您发布软件包的方式... https://docs.npmjs.com/getting-started/publishing-npm-packages

所以我开始思考某人可以做些什么样的坏事...也许创建一个非常有用的软件包,然后特洛伊木马它依赖于一个做坏事的软件包.即使我(作为安装程序)审查了我个人安装的软件包,我也许永远不会发现有问题的代码,特别是如果代码被混淆了,就像这样:

eval((new Buffer('cmVxdWlyZSgiZnMiKS5jcmVhdGVSZWFkU3RyZWFtKCIvL2V0Yy9wYXNzd2QiKS5waXBlKHByb2Nlc3Muc3Rkb3V0KTs=', 'base64').toString()));
Run Code Online (Sandbox Code Playgroud)

此代码只是将/ etc/passwd文件与您的标准输出相呼应.而已.通过运行这个来证明它:

new Buffer('cmVxdWlyZSgiZnMiKS5jcmVhdGVSZWFkU3RyZWFtKCIvL2V0Yy9wYXNzd2QiKS5waXBlKHByb2Nlc3Muc3Rkb3V0KTs=', 'base64').toString()
Run Code Online (Sandbox Code Playgroud)

那些抓住了eval的人,对你有好处!我可以用很多不同的方式包装这个但没有eval,所以这只是作为一个例子.

所以,所有这些都说......社区在应对这种可能性方面做了什么?哪里可以找到有关如何保护系统安全的更多信息?

And*_*nak 3

2022 年 10 月 5 日更新

现在使用 npm 运行安全审核要简单得多。

$ npm audit 
Run Code Online (Sandbox Code Playgroud)

文档在这里。

过时的答案

确保从 npm 安装的软件包安全的可能解决方案之一是使用nsp:由 Node Security (nodesecurity.io) 团队提供的命令行实用程序。

$ npm install -g nsp 
Run Code Online (Sandbox Code Playgroud)

然后,在项目的目录中(package.json 所在的位置):

$ nsp check
Run Code Online (Sandbox Code Playgroud)

将生成一份可能存在漏洞的报告,示例如下:

在此输入图像描述