You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

未直接引入serialize-javascript却出现XSS漏洞,如何修复?

如何修复间接依赖的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

火山引擎 最新活动