npm - 使用 yarn 避免脆弱的间接依赖

标签 npm yarnpkg

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

最近 Github 提醒我它在我的 GH 存储库的 yarn 依赖项中发现了一个漏洞。

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。实际上有好几个。

我的 yarn.lock包含这个:
"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==

我认为这意味着我的依赖树中有 5 个东西需要 lodash。其中一个允许 lodash 3.5 和 4.x,另外四个允许 4.x 的各种范围。

我认为他们都允许 4.17.13 没有冲突,但没有一个需要它。

实际上,当前使用的 lodash 是 4.17.11,小于 4.17.13,因此根据 github(和 CVE),这是一个易受攻击的版本。

我对处理这个问题的正确方法感到困惑,并升级我的 lodash。

手动添加lodash我的 package.json 对我来说似乎是错误的——它实际上不是我关心的依赖,它只是一个间接/传递依赖。如果我将它显式添加到我的 package.json 中,我可能会添加一个现在可以正常工作的版本,但会与依赖树的某些 future 部分发生冲突。这似乎是不必要的限制。

但这是最好的做法,我“应该”做什么?

我有点想 yarn upgrade lodash应该更新 yarn.lock不碰package.json .但是yarn upgrade lodash根本不改变任何文件,它留下 yarn.lock相同。

我不确定这是不是因为 yarn upgrade没有达到我的预期,或者我的依赖树中有其他东西阻止了碰撞 lodash到 4.17.13 ——但如果有,我将如何发现那是什么?为什么不在 yarn.lock 中表示?以上摘录? (或者是,我读错了 yarn.lock?)

我也许可以进入 yarn.lock手动,然后编辑 lodash 线说 version "4.17.13" - 我不清楚 yarn 是否期望我这样做。 (而且看起来很危险,如果我将它编辑为无法用整体依赖树解决的东西怎么办?)

我有一个非常简单的package.json ,但我仍然对我应该在这里做什么以确保我使用的是非易受攻击的 lodash 感到困惑。我不明白 yarn/npm 是如何工作到足以知道要爬下哪个洞的。

我很感激任何非常熟悉 yarn 的人的建议,关于处理这种情况的标准/最佳/正确/“正确”方式。

更新 看来在 yarn 中可能确实没有办法做到这一点? https://github.com/yarnpkg/yarn/issues/4986这让我感到莫名其妙,我不明白 yarn 用户没有它怎么办。

最佳答案

Selective version resolution ,其中一种情况正是您的:

A sub-dependency of your project got an important security update and you don’t want to wait for your direct-dependency to issue a minimum version update.


{
  "resolutions": { "**/**/lodash": "4.17.13" }
}

实际上,我认为您甚至无法将其推送到 VCS 中,只需将其放入 package.json然后 yarn install它应该生成新的yarn.lock ,那么您可以删除 resolutions来自 package.json (我没有测试,只是我的想法)

关于npm - 使用 yarn 避免脆弱的间接依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57281107/

相关文章:

node.js - Angular2 - Windows 7 上的 npm 启动错误

reactjs - 为什么我在创建 React 应用程序时出错?

javascript - fontawesome 如何与 React 一起工作?

asp.net-mvc - 如何使用 ASP.NET Core v2 在 Visual Studio 2017 中安装 font-awesome

Symfony 4 - Webpack Encore bootstrap css 不在输出中

npm - 如何将package-lock.json转换为yarn.lock?

vue.js - 如何在没有 monorepo 的情况下在多个 vue 应用程序中组织代码(组件)共享

git - npm install,缺少node_modules文件夹

reactjs - 切换到 npm 进行 create-react-app

react-native - Yarn Workspaces 是提升只存在于一个工作空间中的模块