npm audit 报了高危漏洞,但补丁版本还没发,怎么办? 技术莉莉 提问于 2026-02-24 12:41:19 阅读 31 安全 项目里用的 lodash 被 npm audit 标成高危漏洞,说是原型污染问题。可我查了官方仓库,最新版还是 4.17.21,根本没发安全补丁。 我已经试过手动升级到最新版,也清了缓存重装,但漏洞还在。现在 CI 流水线卡住了,总不能一直忽略吧?有没有临时绕过或者替代方案? 依赖安全安全补丁 我来解答 赞 2 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 极客富水 Lv1 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 爱棋(打工版) Lv1 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 加载更多 相关推荐 2 回答 74 浏览 npm audit显示高危漏洞但修复后依然存在怎么办? 我在开发一个Vue项目时,用npm audit发现有个高危漏洞(no-ssri@4.0.0),提示影响构建流程。试过运行npm audit fix和手动升级相关包,但漏洞还是没消失。项目用的是Vue ... 照南(打工版) 安全 2026-01-28 21:21:35 2 回答 3 浏览 pnpm audit 报告高危漏洞,但不知道怎么修复? 我用 pnpm 管理项目依赖,今天运行 pnpm audit 时提示有个高危漏洞,说是 axios 版本太低。但我明明在 package.json 里写的是 "axios": "^1.6.0",也重新... 长孙美菊 安全 2026-03-01 15:14:19 2 回答 109 浏览 项目里 npm audit 报了 CVE 漏洞,但我不确定要不要升级依赖? 我跑 npm audit 时发现有个中危的 CVE(CVE-2023-XXXXX),影响的是一个间接依赖 lodash,但我的代码里根本没直接用它。升级主依赖可能会破坏现有功能,这到底该不该处理? 这... 南宫苗苗 安全 2026-02-24 00:47:20 2 回答 44 浏览 npm审计显示high漏洞但修复失败,该怎么排查? 最近用npm audit发现项目有个high级别的lodash漏洞,但运行npm audit fix后还是没解决。手动升级lodash到4.17.21版本,结果其他依赖报错不兼容,卡住了。 项目里有个... Mr.若溪 安全 2026-01-27 17:13:30 1 回答 26 浏览 npm项目中如何快速修复依赖项的SCA高危漏洞? 我在做项目安全扫描时发现,用npm管理的依赖项中有三个高危漏洞,但直接运行npm update没效果。尝试过根据npm audit的建议手动升级具体包版本,但其中一个依赖被多个子模块同时引用,改到第三... 公孙淇钧 安全 2026-02-10 13:43:30 2 回答 63 浏览 npm publish版本没更新还提示权限错误怎么办? 我在用npm发布包时遇到怪事,先执行了npm version patch更新版本号,然后运行npm publish,结果提示npm ERR! code E403说权限被拒绝。但之前成功发过1.0.1版... Dev · 浩轩 工具 2026-02-05 15:03:32 1 回答 21 浏览 npm包更新后怎么确认是否应用了安全补丁? 最近公司要求把项目里lodash升级到4.17.21修复安全漏洞,但我用npm outdated检查发现还是4.17.20。然后我执行了npm update lodash,package.json里的... ___增芳 安全 2026-02-14 16:33:25 2 回答 84 浏览 如何安全地更新npm依赖包版本? 最近在更新项目里的一些npm包,发现有几个核心库有新的大版本更新了。直接升级怕影响现有功能,想知道有没有什么好方法可以先测试新版本对项目的影响? 试过在一个分支上手动修改package.json然后运... 诸葛瑞雪 安全 2026-01-25 15:46:15 2 回答 21 浏览 Jenkins部署时npm install报错EACCES,本地正常怎么办? 我在Jenkins配置前端项目自动部署时,执行到npm install这步一直报错: npm ERR! code EACCES npm ERR! syscall access npm ERR! pat... 诸葛梓熙 工具 2026-02-16 16:13:28 2 回答 74 浏览 为什么pnpm install后package.json里的依赖版本和lock文件不一致? 用pnpm安装依赖时发现奇怪的问题,我按照惯例在package.json里写了"axios": "^1.6.2",但执行pnpm install后,生成的pnpm-lock.yaml里显示axios版... 书生シ春艳 工具 2026-02-10 19:26:26
最直接的办法是用 npm 的 overrides 强制锁定依赖版本。如果你用的是 npm 8.3 以上版本,在 package.json 里加一段配置:
这样会把你项目里的 lodash 强制指向你当前安装的版本。不过说实话,这招对原型污染漏洞没啥用,因为 4.17.21 本身就是有问题的版本。
更实际的方案是换用 lodash-es,它是 ES modules 版本,维护状态比 lodash 好一些,而且支持 tree-shaking。性能上还能减少打包体积,算是个意外收获。改起来也简单:
如果你的 lodash 是间接依赖(被其他包引用),那就麻烦点。可以用 patch-package 自己打个补丁,或者看看能不能把引用它的包也换掉。
最后实在没办法,就在 .npmrc 里暂时忽略这个漏洞:
或者用 npm audit fix --force 碰碰运气,但这个容易把依赖树搞乱,慎用。
说句实在话,lodash 这个库太老了,很多方法原生 JS 已经能替代。像 debounce、throttle 这些自己写个实现也就几行代码,性能上还更可控。长期来看,逐步迁移掉 lodash 才是正道。
_.set传入用户可控的 path),正常用_.merge或普通属性访问不会触发。如果 CI 硬要卡住,临时加个
.npmrc文件里写audit=false先绕过,或者用npm audit --audit-level=moderate忽略 high 级别。改成这样:
或者 CI 里直接跑:
等 lodash 官方发 4.17.22(或者你 fork 个 lodash 打 patch 自己发私有 npm)。