Overview
我在解决由以下人员识别的 ReDoS 漏洞时遇到问题npm audit
。我的应用程序有一个嵌套的子依赖项ansi-html
很容易受到攻击,但不幸的是,似乎维护人员擅离职守 https://github.com/Tjatse/ansi-html/issues/19。正如您在 Github 问题的评论部分中看到的那样,为了解决这个问题,社区已经创建了一个名为ansi-html-community
位于here https://github.com/mahdyar/ansi-html-community,它解决了这个漏洞。
因此,我想替换所有嵌套引用ansi-html
with ansi-html-community
.
Problem
我的正常使用策略npm-force-resolutions
似乎无法完全覆盖不同包的嵌套子依赖项,而只能覆盖具有不同版本号的相同包。我已经研究了几个小时,但不幸的是,我找到解决这个问题的唯一方法似乎是用纱线 https://github.com/Tjatse/ansi-html/issues/19#issuecomment-937690221,我现在正在认真考虑使用它来代替 npm。然而,这并不理想,因为我们的整个 CI/CD 管道都配置为使用 npm。
有谁知道有任何其他方法可以完成嵌套子依赖包替换/解析而不必切换到使用纱线?
相关问题
这些是我能够找到的感兴趣的问题,但不幸的是,他们往往只讨论覆盖包版本号的方法,而不是包本身。
讨论如何覆盖版本号:
如何覆盖嵌套的 NPM 依赖项版本? https://stackoverflow.com/questions/15806152/how-do-i-override-nested-npm-dependency-versions
有评论讨论npm shrinkwrap
(不理想):
npm - 如何覆盖依赖包的依赖项? https://stackoverflow.com/questions/32239240/npm-how-to-override-a-dependent-packages-dependencies
我想到了。截至 2021 年 10 月,该解决方案使用npm-force-resolutions
实际上与您使用指定它的方式非常相似yarn
。您只需提供一个 tarball 的链接,您通常会在其中指定覆盖版本号。您的决议部分package.json
应该看起来像这样:
"resolutions": {
"ansi-html": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz"
}
要查找 tarball 的链接,请使用以下命令,并根据需要修改注册表:
npm view ansi-html-community dist.tarball --registry=https://registry.npmjs.org/
另请注意,对于npm-force-resolutions
跑步时工作npm install
,你将需要一个preinstall
下的条目scripts
的部分package.json
:
"scripts": {
"preinstall": "npx npm-force-resolutions"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)