SCA扫描报了lodash高危漏洞,但我项目里根本没直接装它?
最近CI里的SCA扫描突然报了个lodash的CVE-2023-45133高危漏洞,可我查了package.json压根没直接依赖lodash。是不是被某个依赖偷偷带进来的?该怎么定位和修复啊?
我试着用npm ls lodash找了一下,确实有几层嵌套依赖在用。但我不确定能不能直接升级,怕搞崩了。比如下面这个工具函数就用了get:
import get from 'lodash/get';
function getUserEmail(user) {
return get(user, 'profile.contact.email', '');
}
首先,用
npm ls lodash来查看哪些包依赖了 lodash。这一步你已经做了,找到了几层嵌套的依赖关系。然后,你可以尝试升级这些依赖包,看看能不能解决这个问题。可以先从顶层依赖开始,看看是否有新版本已经修复了这个漏洞。升级命令是
npm update。如果不想直接升级依赖,或者担心升级会带来其他问题,你可以考虑使用
npm override来强制指定 lodash 的版本。在package.json中添加一个 overrides 字段,指定 lodash 的版本为你知道的安全版本,比如这样:这样即使某些包依赖的是旧版本的 lodash,npm 也会安装你指定的安全版本。
最后,记得更新完依赖后重新跑一遍 SCA 扫描,确保漏洞已经被修复。
至于你提到的工具函数,如果升级 lodash 版本后没有 API 变化,应该可以直接替换掉。不过最好还是检查一下新版本的 changelog,确认一下有没有不兼容的地方。