我在解决由 识别的 ReDoS 漏洞时遇到问题npm audit。我的应用程序有一个嵌套的子依赖项ansi-html,很容易受到攻击,但不幸的是,维护者似乎擅离职守了。正如您在 Github 问题的评论部分中看到的,为了解决这个问题,社区对位于ansi-html-community此处的存储库进行了分叉存储库进行了分叉,以解决此漏洞。
因此,我想将所有嵌套引用替换ansi-html为ansi-html-community。
我的正常使用策略npm-force-resolutions似乎无法完全覆盖不同包的嵌套子依赖项,而只能覆盖具有不同版本号的相同包。我已经研究了几个小时,但不幸的是,我发现解决这个问题的唯一方法似乎是使用纱线,我现在正在认真考虑使用yarn而不是npm。然而,这并不理想,因为我们的整个 CI/CD 管道都配置为使用 npm。
有谁知道有任何其他方法可以完成嵌套子依赖包替换/解析而不必切换到使用yarn?
这些是我能够找到的感兴趣的问题,但不幸的是,他们往往只讨论覆盖包版本号的方法,而不是包本身。
npm shrinkwrap(不理想):Jus*_*rty 22
我想到了。截至 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"
}
Run Code Online (Sandbox Code Playgroud)
要查找 tarball 的链接,请使用以下命令,并根据需要修改注册表:
npm view ansi-html-community dist.tarball --registry=https://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)
另请注意,为了npm-force-resolutions在运行时工作npm install,您需要在以下部分preinstall下输入一个条目:scriptspackage.json
npm view ansi-html-community dist.tarball --registry=https://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)