为什么OWASP Dependency-Check扫描我的React项目时总显示lodash有漏洞?

Mr-利娟 阅读 40

我用React开发项目时用了lodash,昨天跑OWASP扫描突然提示lodash有高危漏洞CVE-2023-30127。我明明在package.json里装的是最新的4.17.23版本啊,这是怎么回事?

我试过删除node_modules重装依赖,还是报同样的错误。扫描结果截图显示漏洞组件是4.17.21版本,但我的代码里根本没用这个版本…


// package.json里的依赖片段
"dependencies": {
  "react": "^18.2.0",
  "lodash": "^4.17.23"
},
"devDependencies": {
  "@types/lodash": "^4.14.182"
}

用npm ls lodash查依赖树发现,某个子依赖@types/react-redux居然间接拖入了4.17.21版本。但官方说这个漏洞在4.17.22就修复了,我该怎么强制升级这个嵌套依赖?

我来解答 赞 10 收藏
二维码
手机扫码查看
2 条解答
南宫鑫平
这种情况很常见,就是依赖树里某个子依赖把你拖累了。lodash 4.17.23是你直接写的,但@types/react-redux或者其他依赖内部引用了旧版本的lodash,npm在安装时会保留这个嵌套版本,OWASP扫描到的是实际安装的4.17.21。

解决思路是强制让所有依赖都使用同一个lodash版本。npm从8.3版本开始支持overrides字段,可以在package.json里直接覆盖嵌套依赖的版本。

在package.json里加上这个:

{
"overrides": {
"lodash": "4.17.23"
}
}


加完之后删除node_modules和package-lock.json,重新npm install。overrides会递归作用于所有依赖,不管嵌套多深,都会用你指定的版本。

完事儿跑一下npm ls lodash确认只剩4.17.23,然后再跑OWASP扫描验证。

另外注意,这个CVE-2023-30127我查了一下官方记录,实际上是个误报——lodash官方根本没发过这个CVE编号的漏洞。但既然OWASP扫出来了,用overrides统一版本号肯定没毛病,以后依赖管理也清爽些。
点赞
2026-03-19 18:07
码农予曦
问题出在@types/react-redux间接依赖了有漏洞的lodash版本。用resolutions强制升级:

{
"resolutions": {
"lodash": "^4.17.23"
}
}


如果用的是npm,安装npm-force-resolutions插件,然后在package.json里加个preinstall脚本:

"scripts": {
"preinstall": "npx npm-force-resolutions"
}


删掉node_modules重装依赖,搞定。就这样。
点赞 4
2026-02-16 17:07