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

时间:2018-01-15 13:15:08

标签: node.js npm

Github已将我的应用锁定文件中的依赖项标记为易受攻击。

要修复它,我应该将该软件包更新到更新的版本。

如果我对易受攻击的软件包没有任何控制权,那么该怎么做呢,因为它嵌套在依赖关系树中?

道歉,如果这是一个非常基本的问题,但我似乎没有找到任何有用的。

4 个答案:

答案 0 :(得分:6)

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

Your Package -> Dependency -> Vulnerable package

您将无法更新依赖关系'依赖的方式可以在未来npm installyarn中存活。

但是,您可以采取以下方法:

  • Bug维护者:让他们更新自己的依赖关系并修改版本。这将解决您和依赖此软件包的同行的问题。
  • 是否有替代套餐?也许您可以使用其他软件包而不是易受攻击的软件包。这将涉及对代码的一些更新,但从长远来看可能是最好的方法,特别是如果原始维护者没有响应。
  • 自行修复:分叉存储库并更新此副本中的依赖项。然后,您可以参考package.json
  • 中的包

See this answer for more information on installing directly from Github repos.

这种方法可以在短期内解决问题,但不建议,因为您不会受益于维护者所做的任何错误修复,此外,当您“#”之前。完成此操作后,依赖关系可能已经更新了!

答案 1 :(得分:1)

我认为,有一种 (可能)通过depth标志来实现这一目标。

npm --depth 2 update vulnerable-package

caveat 1 :官方npm update documentation建议使用9999深度来递归检查所有依赖项。但是在我的设置中,会导致错误或npm冻结。因此,我使用现实的深度1或2。(默认值为0,表示仅直接依赖)

caveat 2 :仅当嵌套软件包的可用更新版本(带有漏洞修复程序)仍然适合您的依赖项的版本范围时,此方法才有效。因此,如果这是您的依赖关系树:

Your Package -> Dependency@^1.0.0 -> Vulnerable_package@^2.1.0

该漏洞修复程序处于Vulnerable_package 3.0.0版中,因此它将无法正常工作,因为npm update将仅更新为仍然适合您依赖项版本范围的最高版本。 (在本例中是最高的2.x.x版本)

答案 2 :(得分:0)

第一个更新命令
npm install -g npm

然后,删除易受攻击的人

npm审核修复程序--force

答案 3 :(得分:0)

如此处的说明:https://stackoverflow.com/a/17423915,您可以使用npm shrinkwrap明确告诉npm获取所需的嵌套依赖项版本。