发布于 2026-01-06 8 阅读
0

NPM 审计修复:修复 NPM 依赖项漏洞

NPM 审计修复:修复 NPM 依赖项漏洞

TLDR;

  • 运行该npm audit命令
  • 向下滚动直到找到分隔两个问题的文字行。
  • 手动运行文本中给出的命令,一次升级一个软件包,例如npm i --save-dev jest@24.8.0
  • 升级软件包后,请务必在升级下一个软件包之前检查是否存在重大更改。
  • 避免跑步npm audit fix --force

漏洞

有时在安装项目依赖项后,npm i您会遇到来自NPM的错误,其内容大致如下:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ braces                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ jest [dev]                                                   │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ jest > jest-cli > micromatch > braces                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/786                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


found 62 low severity vulnerabilities in 20610 scanned packages
  62 vulnerabilities require semver-major dependency updates.

这实际上是一个典型的漏洞警告的极小示例。正如您从漏洞下方的文本中看到的,它说:

found 62 low severity vulnerabilities in 20610 scanned packages
  62 vulnerabilities require semver-major dependency updates.

这意味着此示例还将存在另外 61 个漏洞,其严重程度从lowhigh不等,其中漏洞最为危险。有关这些漏洞的更多信息,警告部分还提供了指向NPM漏洞页面high的链接。More Info

一开始,如何正确修复这些漏洞可能会让人感到困惑。NPM实际上提供了一个内置服务本应自动修复这些问题,但我发现它很少奏效,而且几乎不会留下任何漏洞。事实上,以下是我运行该命令后发生的情况示例npm audit fixnpm audit fix

fixed 0 of 62 vulnerabilities in 20610 scanned packages
  1 package update for 62 vulns involved breaking changes
  (use `npm audit fix --force` to install breaking changes; or refer to `npm audit` for steps to fix these manually)

NPM允许我们使用该--force标志,npm audit fix --force但即使是NPM也会警告你不要使用此标志。

user@group:~/npm_project$ npm audit fix --force
npm WARN using --force I sure hope you know what you are doing.

那我们该怎么办?如果我们的包管理器无法修复这些漏洞,那我们肯定就束手无策了,只能想办法带着这些漏洞生存下去,希望没有人会利用它们攻击我们的项目。

修复方案

请使用 NPM 建议的命令手动逐个升级软件包,而不是运行该npm audit fix --force命令。例如npm install --save-dev jest@24.8.0

首先,我想说,对于之前遇到过类似问题的人来说,这可能显而易见。我第一次看到这些警告时,它们堆积如山,而我作为一个懒惰的开发者,甚至懒得仔细查看。

如果你继续在控制台中向上滚动到第一个问题,你就会找到解决方法,而且正如你所料,解决方法很简单,只需更新导致问题的软件包即可。

user@group:~/npm_project$ npm audit --fix

                       === npm audit security report ===                        

# Run  npm install --save-dev jest@24.8.0  to resolve 62 vulnerabilities
SEMVER WARNING: Recommended action is a potentially breaking change
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ braces                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ jest [dev]                                                   │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ jest > jest-cli > jest-config > babel-jest >                 │
│               │ babel-plugin-istanbul > test-exclude > micromatch > braces   │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/786                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

... 61 more vulerabilities ...

在漏洞问题之前,您会注意到一段文本# Run npm install --save-dev jest@24.8.0 to resolve 62 vulnerabilities,这正是我们要找的内容。您可能还会注意到下一行写着…… SEMVER WARNING: Recommended action is a potentially breaking change。手动运行此命令而不是使用默认npm audit fix --force命令,可以让我们准确地知道正在更新哪些软件包。这对于更新这些软件包会导致重大变更的情况非常有用。

概括

所以最终,手动升级存在漏洞的软件包并运行命令npm audit fix --force会得到相同的结果。唯一的区别在于,手动升级软件包允许我们每次只升级一个软件包,测试是否存在破坏性变更,然后再更新下一个软件包,而不是一次性升级所有软件包,发现破坏性变更后却不知道是哪个软件包导致了问题。

文章来源:https://dev.to/bbenefield89/fixing-npm-dependencies-vulnerability-6p8