我是一名 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/