【发布时间】:2022-01-05 18:35:19
【问题描述】:
鉴于现有 npm 包中最近存在恶意软件,我希望有一种机制可以让我在安装新包或更新现有包之前进行一些基本检查。我的主要问题是我直接安装的软件包和间接安装的软件包。
一般来说,我想在安装之前获取 npm 将安装的包版本列表。更具体地说,我想要将要安装的软件包的年龄,因此如果其中任何一个不到一天,我可以生成警告。
如果我可以直接用 npm 做到这一点,那就太好了,但恐怕我需要围绕它编写一些脚本。
具体用例:
如果我在 2021 年 10 月 22 日执行npm install react-native-gesture-handler,它将执行恶意版本的 ua-parser 的安装后挂钩,我的计算机将受到威胁,这是我想避免的。
当我输入 npm install react-native-gesture-handler --dry-run 时,它只告诉我它会安装哪个版本的 react-native-gesture-handler,但它不会告诉我它将安装在那个版本上发布的 ua-parser天。
补充说明:
- 我知道
npm i --dry-run存在,但它只显示直接包。 - 我知道
npm list存在,但它只在安装后显示包(因此在 install-hooks 已经造成伤害之后) - 两者都只显示包版本而不是它们的年龄
- 我不知道如何在安装之前获得安装挂钩随附的软件包列表
- 欢迎提供处理恶意 npm 包的替代方法。
- 到目前为止,我最好的解决方案是执行“--ignore-scripts”,但这会带来一系列问题
【问题讨论】:
-
我能想到的最简单的解决方案是在 docker-container 中执行“npm i && npm list”,然后直接查询 npm 的 api 以获取每个包版本的年龄。我希望有一个更简单的想法。
-
npm 视图怎么样? docs.npmjs.com/cli/v7/commands/npm-view
-
与
npm i --dry-run的问题相同。它只显示包本身的数据,而不是任何依赖项。 -
好吧,我想您可以以某种方式将依赖项解析为单个包 json 文件,然后使用脚本对其进行检查。不知道是否有内置命令
-
npm 客户端是开源的。您可以随时打开拉取请求:github.com/npm/cli
标签: node.js security npm npm-install