Github将我的应用锁定文件中的依赖项标记为易受攻击。为了解决这个问题,我应该把这个包更新到一个新的版本。如果我对易受攻击的软件包没有任何控制权,因为嵌套在依赖关系树中,我该怎么做?抱歉,如果这是一个非常基本的问题,但我似乎没有找到任何有用的关于这一点。
tcomlyy61#
你是正确的-因为易受攻击的包位于您的一个依赖项中,如下所示:
Your Package -> Dependency -> Vulnerable package
您将无法更新依赖项的依赖项,以使其在未来的npm install或yarn中生存。但是,您可以采取以下方法:
npm install
yarn
***Bug the maintainer:**让他们更新依赖并升级版本。这将为您和依赖此软件包的同行解决问题。***是否有替代包?**也许您可以使用不同的包来代替易受攻击的包。这将涉及对代码的一些更新,但从长远来看可能是最好的方法,特别是如果原始维护者没有响应。***自行修复:**Fork仓库,更新此副本中的依赖,即可在您的package.json中引用包。
package.json
See this answer for more information on installing directly from Github repos.这种方法可以在短期内解决问题,但是 * 不建议 *,因为您不会从维护人员所做的任何错误修复中受益,此外,当您这样做时,依赖关系可能已经更新了!
l2osamch2#
NPM 8引入了“overrides”来帮助解决这类问题。现在,您可以将直接依赖项的特定传递依赖项覆盖到您需要的版本。在您的情况下,您可以声明如下内容来修复易受攻击的依赖项。
{ "overrides": { "your-direct-dependency": { "vulnerable-package": "fixed_version" } } }
更多详情@https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides
jdzmm42g3#
如下所述:https://stackoverflow.com/a/17423915,你可以使用npm shrinkwrap显式地告诉npm获取你想要的嵌套依赖版本。
npm shrinkwrap
jogvjijk4#
我认为有一种方法可以(潜在地)通过depth标志来实现这一点。
depth
npm update <name>
name
所以这应该仍然有效:
npm update vulnerable_package
Your Package -> Dependency@^1.0.0 -> Vulnerable_package@^2.1.0
并且漏洞修复在Vulnerable_package版本3.0.0中,那么它将无法工作,因为npm update只会更新到仍然适合您依赖的版本范围的最高版本。(在这种情况下,最高的2.x.x版本)
omhiaaxx5#
直接在更新版本的package.json文件中添加嵌套依赖项对我来说很有效。它也更新了嵌套的包版本。
hk8txs486#
第一次更新命令
npm install -g npm
然后,移除脆弱的
npm audit fix --force
6条答案
按热度按时间tcomlyy61#
你是正确的-因为易受攻击的包位于您的一个依赖项中,如下所示:
您将无法更新依赖项的依赖项,以使其在未来的
npm install
或yarn
中生存。但是,您可以采取以下方法:
***Bug the maintainer:**让他们更新依赖并升级版本。这将为您和依赖此软件包的同行解决问题。
***是否有替代包?**也许您可以使用不同的包来代替易受攻击的包。这将涉及对代码的一些更新,但从长远来看可能是最好的方法,特别是如果原始维护者没有响应。
***自行修复:**Fork仓库,更新此副本中的依赖,即可在您的
package.json
中引用包。See this answer for more information on installing directly from Github repos.
这种方法可以在短期内解决问题,但是 * 不建议 *,因为您不会从维护人员所做的任何错误修复中受益,此外,当您这样做时,依赖关系可能已经更新了!
l2osamch2#
NPM 8引入了“overrides”来帮助解决这类问题。现在,您可以将直接依赖项的特定传递依赖项覆盖到您需要的版本。在您的情况下,您可以声明如下内容来修复易受攻击的依赖项。
更多详情@https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides
jdzmm42g3#
如下所述:https://stackoverflow.com/a/17423915,你可以使用
npm shrinkwrap
显式地告诉npm获取你想要的嵌套依赖版本。jogvjijk4#
我认为有一种方法可以(潜在地)通过
depth
标志来实现这一点。**更新:**见下面mike的评论,不再支持深度选项;
npm update <name>
will now update all instances ofname
in the tree, except those in a bundled or shrinkwrapped tree .所以这应该仍然有效:
并且漏洞修复在Vulnerable_package版本3.0.0中,那么它将无法工作,因为npm update只会更新到仍然适合您依赖的版本范围的最高版本。(在这种情况下,最高的2.x.x版本)
omhiaaxx5#
直接在更新版本的package.json文件中添加嵌套依赖项对我来说很有效。它也更新了嵌套的包版本。
hk8txs486#
第一次更新命令
npm install -g npm
然后,移除脆弱的
npm audit fix --force