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


91

Github告诉我,package-lock.json文件中的依赖项容易受到攻击并且已经过时。问题是,如果我做的npm install还是npm update,他们都没有更新程序包lock.json文件的依赖。

我对此进行了很多搜索,还删除了文件并完成了npm install

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

提前谢谢了。


2
尝试删除您的package-lock.json并再次运行npm install
Rishikesh Dhokare

1
您可以检查您的依赖关系,以找出哪个依赖于hoek并更新该依赖。(但您也可能不走运,并且该依赖项没有更新的版本。)
罗兰·斯塔克

我建议@RishikeshDhokare
xpto

我按照@RishikeshDhokare所说的去做。我自己解决了问题
迈利·萨

Answers:


41

听起来Hoek是您的一个依赖项的依赖项(因此,您package.json中有一个包需要从它自己的package.json中获取它)。

您已经尝试删除/重新安装和更新项目依赖项而没有成功,因此似乎所涉及的软件包依赖项指定了显式或最大版本。

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

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

例如,查看使用Hoek的软件包: npm ls hoek

编辑2: 正如Ulysse BN正确指出的那样,如果您具有NPM版本6或更高版本,则可以npm audit fix用来要求NPM尝试为您修复漏洞。

编辑3: 阅读此书的人还应该在下面查看JBallin的答案。它扩展了我在此处提供的信息,并且(我认为)是一种结构更合理的答案,可以更好地解决OP的问题。但是-如果您想快速解决-该答案就足够了。


3
我在另一个包(Growl)中遇到了类似的问题。我猜这是我某些东西的某个版本,package.json具体取决于Growl的特定(脆弱)版本。您的答案是在正确的轨道上,如果您可以共享一条命令,该命令将显示哪个软件包package.json依赖于中显示的易受攻击的软件包,那么您可能会确定答案package-lock.json
Fuhrmanator

查看最新答案。如果您需要其他帮助-新建一个问题。:)
Alex Mulchinock


您确定还会有其他问题吗?他们似乎像重复。
JBallin

自此以来,@ JBallin我的答案已经更新了好几次。它最初可能没有资格作为副本。
Alex Mulchinock

24

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


注意

更新依赖项时,应查看CHANGELOG中是否有任何重大更改。

诊断

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

快速修复尝试

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

手动修复

父程序包很可能已经修复了它们的依赖关系(您可以通过转到其GitHub并查看最近的提交进行验证,或者只是查看是否能解决此问题),因此您可以运行npm i $PARENT_PKG_NAME @$NEW_VERSION并更新程序包锁.json。

如果父母尚未修复漏洞

如果维护者似乎没有响应,则可以考虑使用替代软件包来完成相同任务,或者分叉该软件包并自行更新漏洞。

验证修复

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


在我的情况下,快速修复不能同时解决该手册中的手册,因为父级是一个框架,在更新中完全更改了API,甚至删除了该库?这是因为父框架仍然使用旧库。确实,旧的仍在维修但未更新,我的意思是我该如何进行?
胭脂红Tambascia

1
@CarmineTambascia,如果您使用的软件包没有解决其漏洞(我会打开一个问题/ PR,希望它能够得到解决)-我会考虑制作自己的软件包分支,修复漏洞,受影响包装的位置。
JBallin

有没有办法更新子程序包?如果父软件包尚未针对漏洞进行纠正?
Harshita

@Harshita参见标题为“如果父母尚未修复漏洞”的部分
JBallin

1
@Harshita你已经联系他们了吗?修复这些漏洞也符合他们的利益。
JBallin


2

使用:

npm我胡克

npm将安装hoek的最新版本,并且package.lock.json会更新。


0

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


0

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


0

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

npm audit

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

npm audit fix

0

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

npm ci

这将package-lock.json通过package.json首先忽略来安装软件包。然后使用

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


另一个解决方案可能是:npmjs.com/package/npm-check-updates
孤独

-3

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

npm update package-lock.json
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.