未直接引入serialize-javascript却出现XSS漏洞,如何修复?
嘿,我懂你现在的处境——明明自己没直接用serialize-javascript,结果npm audit查出了三个中等XSS漏洞,确实有点懵。不过别担心,咱们一步步来解决它:
方案1:用npm依赖覆盖强制指定安全版本(最直接有效)
因为serialize-javascript是你的项目依赖树里的间接依赖(来自@angular-devkit/build-angular的子依赖),你没法直接修改它的版本,但npm 8及以上版本支持的overrides字段可以帮你强制所有嵌套依赖都使用安全版本。
打开你的package.json,在原有结构里添加overrides字段(注意和其他同级字段对齐):
{ "name": "client", "version": "0.0.1", // 保留你原有的所有其他字段,比如scripts、dependencies等 "overrides": { "serialize-javascript": "^2.1.1" } }
添加完成后运行:
npm install
这时候npm会把整个依赖树里的serialize-javascript都替换成2.1.1或更高的安全版本,直接修复所有三个XSS漏洞。
方案2:更新上层依赖(长期维护推荐)
从audit报告能看到,漏洞都来自@angular-devkit/build-angular的子依赖(terser-webpack-plugin和copy-webpack-plugin)。你可以尝试把@angular-devkit/build-angular更新到最新版本,Angular团队大概率已经在新版本里升级了这些有漏洞的嵌套依赖。
运行以下命令更新开发依赖:
npm update @angular-devkit/build-angular --save-dev
更新完成后再跑一遍npm audit,看看漏洞是否已经消失。如果还有残留,再结合方案1的overrides来兜底就行。
方案3:针对单个漏洞的深度更新(临时应急)
报告里提到运行npm update terser-webpack-plugin --depth 3可以修复其中1个漏洞,如果你想先临时解决一部分,可以执行这个命令:
npm update terser-webpack-plugin --depth 3
不过这个方法只能解决一个漏洞,剩下的两个还是需要用前面的方案1或2来彻底修复。
额外提醒
根据官方漏洞说明,这个XSS漏洞不会影响Node.js环境,只在浏览器场景下存在风险。但为了项目整体的安全性和合规性,还是建议尽快修复。
内容的提问来源于stack exchange,提问作者Sampath




