【问题标题】:How do I fix a vulnerable npm package in my package-lock.json that isn't listed in the package.json?如何修复 package-lock.json 中未在 package.json 中列出的易受攻击的 npm 包?
【发布时间】:2018-10-23 23:54:20
【问题描述】:

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

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

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

非常感谢。

【问题讨论】:

  • 尝试删除你的 package-lock.json 并再次运行 npm install
  • 您可以检查您的依赖关系以找出哪个依赖于 hoek 并更新那个。 (但是您也可能不走运,并且该依赖项没有更新的版本。)
  • 我建议@RishikeshDhokare 也一样
  • 我按照@RishikeshDhokare 所说的做了。为自己解决了问题

标签: node.js npm package.json package-lock.json


【解决方案1】:

听起来 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 的问题。但是 - 如果您想要快速修复 - 这个答案就足够了。

【讨论】:

  • 我在使用不同的包 (Growl) 时遇到了类似的问题。我猜这是我的package.json 中的某个版本,这取决于 Growl 的特定(易受攻击的)版本。你的答案在正确的轨道上,如果你能分享一个命令来显示package.json 中的哪些包取决于package-lock.json 中显示的易受攻击的包,你也许可以确定它。
  • 查看更新的答案。如果您需要其他帮助 - 创建一个新问题。 :)
  • 您确定有必要再提出一个问题吗?它们看起来像是重复的。
  • @JBallin 我的答案已经更新了好几次。它最初可能没有资格作为副本。
【解决方案2】:

用途:

npm 我胡克

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 这在实践中是非常危险的。即使是补丁版本也可以隐藏一些重大错误或重大更改,甚至更糟(例如,黑客在 npmjs.org 上发布新版本的库)。您无法保证更新所有依赖项将使您的项目正常工作。安全的方法是逐步更新依赖关系,通过自动化测试/构建为每个请求创建拉取请求,以确保一切正常。
        【解决方案6】:

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


        注意

        更新依赖项时,您应该查看 CHANGELOG 以了解任何重大更改。

        诊断

        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 并执行它将更新您的 package-lock.json。

        如果父母没有修复漏洞

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

        验证修复

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

        【讨论】:

        • 在我的情况下,快速修复在这个答案中的手册也不起作用,因为父级是一个框架,在更新中完全改变了 API,甚至摆脱了那个库?这是因为父框架仍然使用旧库。事实上,旧的仍然存在但没有更新,我的意思是我该如何继续?
        • @CarmineTambascia 如果你使用的包没有修复它的漏洞(我会打开一个问题/PR 希望它会得到修复) - 我会考虑制作你自己的包分支( s),修复漏洞,代替受影响的软件包。
        • 有没有办法更新子包?如果父包没有修复漏洞?
        • @Harshita 请参阅标题为“如果父级尚未修复漏洞”的部分
        • @Harshita 你联系到他们了吗?修复这些漏洞也符合他们的利益。
        【解决方案7】:

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

        npm update package-lock.json
        

        【讨论】:

          【解决方案8】:

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

          npm audit
          

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

          npm audit fix
          

          【讨论】:

            【解决方案9】:

            手动编辑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
            • 这是一个很好的替代解决方案。如果这是在一个打算发布的包中完成的,那么它将不起作用,因为 package-lock.json 文件没有被发布,但是对于在本地使用包,这可能是npm audit fix 的最佳解决方案是不是一个选项。
            猜你喜欢
            • 2020-09-24
            • 2022-10-09
            • 2020-01-16
            • 2020-05-03
            • 2022-01-12
            • 2020-01-19
            • 1970-01-01
            • 2022-09-26
            • 2018-10-06
            相关资源
            最近更新 更多