npm audit 报了高危漏洞,但补丁版本还没发,怎么办?

技术莉莉 阅读 31

项目里用的 lodashnpm audit 标成高危漏洞,说是原型污染问题。可我查了官方仓库,最新版还是 4.17.21,根本没发安全补丁。

我已经试过手动升级到最新版,也清了缓存重装,但漏洞还在。现在 CI 流水线卡住了,总不能一直忽略吧?有没有临时绕过或者替代方案?

我来解答 赞 2 收藏
二维码
手机扫码查看
2 条解答
极客富水
lodash 4.17.21 的原型污染漏洞(CVE-2021-23337)确实是个老问题了,官方维护状态堪忧,这么久了还没发补丁。既然 CI 卡住了,给你几个实际能用的方案。

最直接的办法是用 npm 的 overrides 强制锁定依赖版本。如果你用的是 npm 8.3 以上版本,在 package.json 里加一段配置:

{
"overrides": {
"lodash": "$lodash"
}
}


这样会把你项目里的 lodash 强制指向你当前安装的版本。不过说实话,这招对原型污染漏洞没啥用,因为 4.17.21 本身就是有问题的版本。

更实际的方案是换用 lodash-es,它是 ES modules 版本,维护状态比 lodash 好一些,而且支持 tree-shaking。性能上还能减少打包体积,算是个意外收获。改起来也简单:

import _ from 'lodash-es';
// 或者按需引入
import debounce from 'lodash-es/debounce';


如果你的 lodash 是间接依赖(被其他包引用),那就麻烦点。可以用 patch-package 自己打个补丁,或者看看能不能把引用它的包也换掉。

最后实在没办法,就在 .npmrc 里暂时忽略这个漏洞:

ignore-scripts=true
audit=false


或者用 npm audit fix --force 碰碰运气,但这个容易把依赖树搞乱,慎用。

说句实在话,lodash 这个库太老了,很多方法原生 JS 已经能替代。像 debounce、throttle 这些自己写个实现也就几行代码,性能上还更可控。长期来看,逐步迁移掉 lodash 才是正道。
点赞
2026-03-02 09:11
爱棋(打工版)
lodash 4.17.21 确实还没修这个原型污染漏洞(CVE-2021-23337),但 npm audit 报的是误报——这个漏洞需要特定调用方式(比如 _.set 传入用户可控的 path),正常用 _.merge 或普通属性访问不会触发。
如果 CI 硬要卡住,临时加个 .npmrc 文件里写 audit=false 先绕过,或者用 npm audit --audit-level=moderate 忽略 high 级别。
改成这样:

echo "audit=false" > .npmrc


或者 CI 里直接跑:

npm ci --audit=false


等 lodash 官方发 4.17.22(或者你 fork 个 lodash 打 patch 自己发私有 npm)。
点赞 1
2026-02-24 13:02