如何修复我的 package-lock.json 中未在 package.json 中列出的易受攻击的 npm 包?



Github告诉我,我的package-lock.json文件中的依赖项容易受到攻击且过时。问题是,如果我npm installnpm update,它们都不会更新 package-lock.json 文件中的依赖项。

我对此做了很多谷歌搜索,并删除了文件并完成了npm install.

如果有人可以帮助解决这个问题,我将不胜感激。有问题的包是Hoek,我的package.json文件中实际上没有它。

听起来Hoek是你的一个依赖关系的依赖关系(所以,你的package.json中的一个包需要它来自它自己的package.json)。

您已经尝试删除/重新安装和更新项目依赖项但没有成功,因此似乎有问题的包依赖项指定了显式版本或最高版本。

如果没有看到每个依赖项的 package.json,就很难进一步建议如何强制更新。

编辑:为了帮助您识别哪些包正在使用哪些依赖项,您可以使用 NPM 的ls命令:https://docs.npmjs.com/cli/ls

例如,要查看哪些包正在使用 Hoek:npm ls hoek

编辑2:正如雅典表正确指出的那样,如果您拥有NPM版本6或更高版本,您可以使用npm audit fix要求NPM尝试为您修复漏洞。

编辑3:阅读本文的人也应该在下面查看JBallin的答案。它扩展了我在这里提供的信息,并且(在我看来)是一个更有条理的答案,可以更好地解决OP的问题。但是 - 如果你想要一个快速的解决方案 - 这个答案应该足够了。

TLDR:使用npm i $PARENT_PKG_NAME更新父包。


注意

更新依赖项时,应查看更改日志以了解任何重大更改。

诊断

npm audit将显示易受攻击的包(请注意,为此需要一个 package-lock.json 文件,因此您需要运行npm i),以及它是其依赖项的包(如果适用)。请注意,您还可以使用npm ls $CHILD_PKG_NAME查看其父依赖项。

快速修复尝试

npm audit fixnpm audit fix --force值得一试,但有时需要手动完成修复(见下文)。

手动修复

很可能父包已经修复了它们的依赖项(你可以通过访问他们的GitHub并查看最近的提交来验证这一点 - 或者只是看看这是否修复了它),所以你可以运行npm i $PARENT_PKG_NAME @$NEW_VERSION,它会更新你的包-lock.json。

如果父级尚未修复漏洞

如果维护者似乎没有响应,您可以考虑使用完成相同操作的替代软件包,或者分叉软件包并自己更新漏洞。

验证修复

现在,您可以通过运行npm audit并确保没有漏洞显示来验证它是否正常工作。提交您的更改,将它们推送到 GitHub,刷新您的通知/警报,它们应该消失了!

步骤 1:安装对等依赖项

npm i --legacy-peer-deps

步骤 2:手动更改包

手动编辑package-lock.json并将易受攻击的软件包版本更新为固定版本。

npm ci

这将通过首先忽略package.json来根据package-lock.json安装软件包。

第 3 步:再次控制它

npm audit fix

以确定它是否正确完成。如果它没有帮助,请使用其他给定的解决方案。

更多信息在这里:

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable

或在这里: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities

如果您有npm@6或更高版本,则可以使用npm audit fix来解决安全问题。

使用:

npm i hoek

npm 将安装最新版本的 hoek 和你的 package.lock.json 更新。

自 NPM v8.3.0 (2021-12-09) 起,package.json有一个属性overrides可以帮助您修复依赖依赖项上的漏洞。无需触摸package-lock.json文件。

{
"overrides": {
"foo": "1.0.0"
}
}

文档:https://docs.npmjs.com/cli/v9/configuring-npm/package-json#overrides

注意:不要忘记检查您尝试覆盖的包上是否存在中断性更改。

要检查易受攻击的 npm 包,只需使用以下命令:

npm audit

要修复易受攻击的 npm 包,只需使用以下命令也可以修复 package-lock.json:

npm audit fix

我遇到了这个问题,发现这是因为我运行 npm 的服务器上有一个旧版本的 npm - package-lock.json 仅受较新版本支持。

您是否尝试过:转到项目根目录,删除package-lock.json文件,node_modules.cache文件夹,然后npm install

安装新的依赖项后,运行以下命令以更新 package-lock.json 文件:

npm update package-lock.json

最新更新