Npm 避免与纱线的脆弱间接依赖

Npm 避免与纱线的脆弱间接依赖,npm,yarnpkg,Npm,Yarnpkg,我是一名Rails开发人员,对JS依赖关系管理有点陌生。我使用Thread/webpacker管理JS依赖关系,尽管我认为webpack/webpacker没有任何关于这个问题的特定内容 最近Github提醒我它在GH回购的纱线依赖项中发现了一个漏洞 Upgrade lodash to version 4.17.13 or later. For example: lodash@^4.17.13: version "4.17.13" (CVE-2019-10744) 我没有lo

我是一名Rails开发人员,对JS依赖关系管理有点陌生。我使用Thread/webpacker管理JS依赖关系,尽管我认为webpack/webpacker没有任何关于这个问题的特定内容

最近Github提醒我它在GH回购的纱线依赖项中发现了一个漏洞

Upgrade lodash to version 4.17.13 or later. For example:
   lodash@^4.17.13:
      version "4.17.13"
(CVE-2019-10744)

我没有lodash作为直接依赖项,我的
package.json
中没有提到它

相反,它是一种间接的/可传递的依赖关系——我的一些依赖关系(或它们的依赖关系)依赖于lodash。实际上有好几个

My
纱线.锁
包含以下内容:

"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.4, lodash@~4.17.10:
  version "4.17.11"
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
  integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==

“lodash@>=3.5识别如何引入易受攻击的依赖关系很容易成为一场噩梦。
您希望查看依赖关系树,以确定lodash是如何使用
纱线列表引入的

这将有助于你理解你最初是如何得到这个的

现在,问题的第二部分是修复漏洞。这可以通过使用Snyk.io之类的工具来实现,该工具将扫描您的依赖项,并建议升级哪些直接依赖项,以注入不易受攻击的lodash版本。

看看,其中一种情况正是您的:

项目的子依赖项得到了重要的安全更新,您不希望等待直接依赖项发布最低版本更新


事实上,我认为你甚至不能把它放到VCS中,只要把它放到
包中。json
然后
纱线安装
它应该会生成新的
纱线。锁定
,然后你就可以从
包中删除
分辨率
。json
(我没有测试它,只是我的想法)

你最终明白了吗?啊哈,如果他们在文档中提到这个用例,这确实表明它可能是解决方案!我担心这会让你(意外地)明白指定一个直接依赖项表示不兼容的版本,它允许您完全覆盖它。但是如果文档这样说,显然这就是他们想要的…当文档说“您不想等待您的直接依赖项发布最低版本更新”时“,这意味着他们希望每一个包在它所依赖的任何东西收到安全更新时都应该发布一个新版本(这是可传递的;上游的一切都必须如此),这似乎是非常令人讨厌和不现实的。。。但显然这就是设计。。。古怪的
{
  "resolutions": { "**/**/lodash": "4.17.13" }
}