Angular项目安装jsonwebtoken后出现高安全漏洞,npm audit无法修复的问题求助
嘿,我来帮你拆解下这个问题,其实这事儿跟jsonwebtoken本身没啥关系,先给你捋清楚来龙去脉:
首先,你看到的高安全漏洞是来自vite这个依赖(版本5.0.0-5.0.11),而它是被@angular-devkit/build-angular@17.1.0间接依赖的——安装jsonwebtoken只是触发了npm的审计检查,刚好把这个早就存在于项目里的漏洞揪出来了。而且这个漏洞只影响开发服务器环境,生产构建的代码不会受波及,这点先放宽心。
下面给你几个可行的处理方案,你可以根据自己的项目情况选:
暂时忽略漏洞(适合开发环境安全可控的场景)
因为漏洞仅作用于开发阶段的服务器,如果你团队的开发环境是内网或者信任的环境,可以先不做破坏性修复。执行npm audit fix(别加--force),它会自动修复那些不需要降级依赖的漏洞,而这个需要降级Angular构建工具的漏洞会被跳过。要是不想每次npm install都看到这个提示,还能在package.json里加个脚本:"scripts": { "audit": "npm audit --production" }之后用
npm run audit只会检查生产依赖的漏洞,不会再提示开发依赖的问题。等待官方修复(最稳妥的长期方案)
Angular团队已经跟进这个问题了,vite在5.0.12版本已经修复了这个漏洞,Angular的构建工具后续版本会自动升级依赖的vite版本。你可以关注Angular CLI的更新通知,等新版本发布后执行npm update @angular-devkit/build-angular就能彻底解决这个问题。手动强制升级vite版本(快速解决的折中方案)
利用npm的overrides功能(npm 8.3及以上支持),在package.json里强制指定vite为修复后的版本:"overrides": { "vite": "5.0.12" }然后执行
npm install,这样就能让@angular-devkit/build-angular使用修复后的vite版本,同时不用降级Angular的核心依赖。不过记得安装后测试下项目的开发服务和生产构建是否正常,虽然小版本升级兼容性问题极小,但还是要谨慎验证。降级到Angular 15(临时应急方案)
如果你现在必须立刻消除漏洞提示,且项目能兼容Angular 15的话,可以像你测试的那样降级到15.2.10,但这相当于放弃了Angular 16/17的新特性,只适合短期过渡用,不推荐长期保留这个方案。
备注:内容来源于stack exchange,提问作者Collina

