如何解决gulp依赖glob-parent的安全漏洞问题?
漏洞基本信息
High glob-parent before 5.1.2 vulnerable to Regular Expression
Denial of Service in enclosure regexPackage glob-parent
Patched in >=5.1.2
Dependency of gulp [dev]
Path gulp > glob-watcher > chokidar > glob-parent
安全无破坏性的修复方案
既然你只能用npm,我推荐用npm官方支持的overrides字段来统一锁定glob-parent的安全版本——这个方法能强制依赖树里所有的glob-parent实例都升级到修复版本,同时完全不会影响应用的正常运行:
步骤1:确认npm版本达标
overrides是从npm 8.3.0开始才支持的功能,先检查你的npm版本:
npm -v
如果版本低于8.3.0,先把npm升级到最新版:
npm install -g npm@latest
步骤2:给package.json加overrides配置
打开你的package.json,在根节点(和scripts、dependencies同级)添加下面的配置:
"overrides": { "glob-parent": "^5.1.2" }
这个配置会让所有依赖(哪怕是深层嵌套的)都使用glob-parent 5.1.2或更高的兼容版本。
步骤3:更新依赖并验证
运行下面的命令更新依赖,让overrides生效:
npm install
之后打开package-lock.json,搜索glob-parent,确认所有条目对应的版本都是>=5.1.2就没问题了。
步骤4:确认应用正常运行
执行你平时用的构建或运行命令(比如gulp build),确保应用没有出现任何报错。
为什么这个方案靠谱?
glob-parent 5.1.2的修复只是针对正则表达式DoS的漏洞,完全没改任何公共API,所以依赖它的chokidar、glob-watcher和gulp都能正常工作,不会引入兼容性问题。
虽然有人说这个漏洞在npm里是误报,但主动升级到修复版本能彻底消除潜在风险,还是更稳妥的做法。
内容的提问来源于stack exchange,提问作者Bobby

