npm audit检出80个漏洞无法修复 此类常见问题该如何处理
问题解答
这类问题是否属于前端开发常见问题
是,这是前端项目开发过程中非常普遍的情况,绝大多数漏洞都来自你没有直接引入的间接子依赖,尤其是使用react-scripts这类封装度高的官方脚手架的项目,脚手架本身依赖了大量开发工具链,只要其中任意子依赖报漏洞,就会同步出现在你的项目npm audit结果里,常规的npm audit fix默认不会跨大版本更新依赖,所以经常会出现常规手段无法修复的情况。
漏洞处理方案
- 第一步先做漏洞影响范围判定
先确认漏洞对应的依赖属于开发依赖还是生产依赖:像示例中的ansi-html、webpack-dev-server都属于仅在本地开发阶段运行的开发依赖,不会被打包到线上生产代码中,这类漏洞哪怕评级为高风险、严重风险,也不会对线上用户安全造成影响,完全可以忽略不用处理。
如果漏洞属于生产依赖,再进一步评估你的项目是否会触发漏洞:比如漏洞需要依赖文件上传、特殊参数传入等触发条件,而你的项目根本没有对应功能,也不需要处理。 - 不要随意执行
npm audit fix --force
该命令会强制跨大版本更新依赖,如同示例提示的会直接安装存在破坏性变更的react-scripts版本,大概率会直接导致项目运行报错,需要花费大量时间处理兼容问题,性价比极低。 - 针对性处理确实存在风险的漏洞
如果确认漏洞属于生产依赖,且你的项目确实存在触发风险,可以按优先级选择修复方式:- 优先升级漏洞对应的上层依赖:比如示例中的漏洞根源是
react-scripts依赖了低版本的不安全组件,先升级react-scripts到官方最新稳定版,大部分情况下官方已经在新版本中完成了依赖漏洞修复。 - 用
overrides配置强制指定子依赖版本:如果上层依赖还没有出修复版本,可以在package.json中添加overrides字段(yarn对应配置为resolutions,pnpm对应配置为pnpm.overrides),直接指定存在漏洞的子依赖的安全版本,不需要修改上层依赖版本即可完成修复,修改完成后需要删除node_modules和包管理锁文件重新安装依赖,同时测试项目功能是否正常,避免子依赖版本变更导致上层依赖运行异常。
- 优先升级漏洞对应的上层依赖:比如示例中的漏洞根源是
- 屏蔽无用告警
对于确认不需要修复的漏洞,可以配置npm audit的忽略规则,将这类漏洞加入忽略列表,避免每次执行检测都弹出大量无用告警干扰正常判断。
内容的提问来源于stack exchange,提问作者DrakeColeman
相关产品推荐
相关产品推荐

