为什么OWASP Dependency-Check扫描我的React项目时总显示lodash有漏洞?
我用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就修复了,我该怎么强制升级这个嵌套依赖?
解决思路是强制让所有依赖都使用同一个lodash版本。npm从8.3版本开始支持overrides字段,可以在package.json里直接覆盖嵌套依赖的版本。
在package.json里加上这个:
加完之后删除node_modules和package-lock.json,重新npm install。overrides会递归作用于所有依赖,不管嵌套多深,都会用你指定的版本。
完事儿跑一下npm ls lodash确认只剩4.17.23,然后再跑OWASP扫描验证。
另外注意,这个CVE-2023-30127我查了一下官方记录,实际上是个误报——lodash官方根本没发过这个CVE编号的漏洞。但既然OWASP扫出来了,用overrides统一版本号肯定没毛病,以后依赖管理也清爽些。
如果用的是npm,安装npm-force-resolutions插件,然后在package.json里加个preinstall脚本:
删掉node_modules重装依赖,搞定。就这样。