NodeJS 如何更新npm嵌套(易受攻击)依赖?

rdrgkggo  于 2023-03-22  发布在  Node.js
关注(0)|答案(6)|浏览(254)

Github将我的应用锁定文件中的依赖项标记为易受攻击。
为了解决这个问题,我应该把这个包更新到一个新的版本。
如果我对易受攻击的软件包没有任何控制权,因为嵌套在依赖关系树中,我该怎么做?
抱歉,如果这是一个非常基本的问题,但我似乎没有找到任何有用的关于这一点。

tcomlyy6

tcomlyy61#

你是正确的-因为易受攻击的包位于您的一个依赖项中,如下所示:

Your Package -> Dependency -> Vulnerable package

您将无法更新依赖项的依赖项,以使其在未来的npm installyarn中生存。
但是,您可以采取以下方法:

***Bug the maintainer:**让他们更新依赖并升级版本。这将为您和依赖此软件包的同行解决问题。
***是否有替代包?**也许您可以使用不同的包来代替易受攻击的包。这将涉及对代码的一些更新,但从长远来看可能是最好的方法,特别是如果原始维护者没有响应。
***自行修复:**Fork仓库,更新此副本中的依赖,即可在您的package.json中引用包。

See this answer for more information on installing directly from Github repos.
这种方法可以在短期内解决问题,但是 * 不建议 *,因为您不会从维护人员所做的任何错误修复中受益,此外,当您这样做时,依赖关系可能已经更新了!

l2osamch

l2osamch2#

NPM 8引入了“overrides”来帮助解决这类问题。现在,您可以将直接依赖项的特定传递依赖项覆盖到您需要的版本。在您的情况下,您可以声明如下内容来修复易受攻击的依赖项。

{
  "overrides": {
    "your-direct-dependency": {
      "vulnerable-package": "fixed_version"
    }
  }
}

更多详情@https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides

jdzmm42g

jdzmm42g3#

如下所述:https://stackoverflow.com/a/17423915,你可以使用npm shrinkwrap显式地告诉npm获取你想要的嵌套依赖版本。

jogvjijk

jogvjijk4#

我认为有一种方法可以(潜在地)通过depth标志来实现这一点。

所以这应该仍然有效:

npm update vulnerable_package
  • caveat*:只有当嵌套包的更新版本(修复了漏洞)仍然适合您的依赖项的版本范围时,这才有效。因此,如果这是您的依赖项树:
Your Package -> Dependency@^1.0.0 -> Vulnerable_package@^2.1.0

并且漏洞修复在Vulnerable_package版本3.0.0中,那么它将无法工作,因为npm update只会更新到仍然适合您依赖的版本范围的最高版本。(在这种情况下,最高的2.x.x版本)

omhiaaxx

omhiaaxx5#

直接在更新版本的package.json文件中添加嵌套依赖项对我来说很有效。它也更新了嵌套的包版本。

hk8txs48

hk8txs486#

第一次更新命令

npm install -g npm

然后,移除脆弱的

npm audit fix --force

相关问题