Laravel升级至8后ansi-regex高危漏洞无法经npm更新修复
漏洞无法通过常规方案修复的核心原因
该高危漏洞并非来自Laravel项目自身引入的前端业务依赖,而是当前安装的NPM 8.12.1客户端内部内嵌的旧版依赖,漏洞路径明确指向node_modules/npm/node_modules/目录,属于NPM程序自身打包携带的依赖包。
常规的npm audit fix、删除lock文件与node_modules目录重装、单独重装相关依赖等操作,仅会处理项目自身依赖树内的包,无权修改NPM客户端自带的内嵌依赖,因此所有常规操作都无法消除该告警。
修复方案
方案1:升级NPM到安全版本(推荐优先选择,修复最彻底)
ansi-regex的正则表达式复杂度漏洞,在NPM 8.15.0及以上的8.x维护版本、所有9.x以上版本中均已完成修复,直接全局升级NPM即可解决:
- 升级到最新稳定版,执行命令:
npm install -g npm@latest - 如需保留8.x大版本、不跨大版本升级,执行命令:
npm install -g npm@8
升级完成后执行npm -v确认版本号≥8.15.0,重新运行npm audit即可看到对应告警消失。
方案2:环境限制无法升级NPM时,通过依赖强制覆盖规则修复
当前使用的NPM 8.12.1已支持overrides依赖覆盖规则,可在项目根目录的package.json文件中新增如下配置,强制所有依赖层级(包括NPM内嵌的依赖层级)的ansi-regex使用5.0.1及以上的无漏洞安全版本:
{ // 原有package.json中的name、scripts、dependencies、devDependencies等配置保持不变 "overrides": { "ansi-regex": "^5.0.1" } }
配置添加完成后,删除项目下的node_modules文件夹与package-lock.json文件,重新执行npm install完成依赖安装即可。
注意事项
- 不要随意使用
npm audit fix --force强制升级所有依赖,Laravel 8默认配套的laravel-mix构建工具对依赖版本有严格兼容要求,盲目跨大版本升级依赖会导致前端构建命令执行失败。 - 修复完成后可执行
npm ls ansi-regex校验所有层级的ansi-regex版本,确认不存在3.0.0、4.0.0-4.1.0区间的旧版本即修复完成。
内容的提问来源于stack exchange,提问作者Santouryuu
相关产品推荐
相关产品推荐

