为什么 npm install 的时候会显示严重漏洞

8,243 阅读3分钟

前言

当我们在 npm install 安装项目依赖的时候,经常看到下图提示的漏洞警告。

分析问题

我们看上图的提示说可以使用 npm audit fix 来解决问题,那么 npm audit 到底是干什么的呢?为什么可以通过 npm audit fix 可以解决问题。让我们赶紧去 npm 的官网去查看一波。

官网介绍:

npm audit 允许开发人员分析复杂的代码,并查明特定的漏洞和缺陷。

npm audit fix 检测项目依赖中的漏洞并自动安装需要更新的有漏洞的依赖,而不必再自己进行跟踪和修复。

当然还有其他的一些命令:

# 只更新 package-lock.json, 不更新 node_modules
npm audit fix --package-lock-only

# 不更新开发依赖即 devDependencies
npm audit fix --only=prod

# 更新到最新的依赖, 而不是仅仅更新到兼容的依赖
npm audit fix --force

# 空运行一次审核修复,了解修复的作用, 并且以 json 的格式输出结果
npm audit fix --dry-run --json

还有一些命令请自行查看文档

那么我们知道了它是通过分析 package-lock.json 文件,继而扫描我们的包还分析是否包含漏洞的,那么有没有办法不让他扫描呢?

解决问题

找到问题后,我的第一反应是可以不可以通过配置关闭这个分析功能呢(大佬第一反应可能是怎么解决)。

通过查看文档我们发现 npm audit 是可以通过配置来进行关闭的。那么我们首先来看一下我们的配置都有哪些,是通过哪个配置来管理分析功能的。

# 执行下面的命令输出我们的 npm config
npm config ls -l

可以看到会输出很多默认的配置,审计分析功能就是由 audit = true 这个属性控制的。

我们还可以看到 audit-level = "low" 来控制漏洞的危险等级。

那么我们就可以通过修改这些配置来到达关闭审计分析的功能。

# 将 audit 设置成 false 关闭分析功能
npm set audit false

# 设置分析漏洞危险等级,有4个选项: 'low(低)', 'moderate(中等)', 'high(高危)', 'critical(紧要)'
npm set audit-level high

好了,世界清静了,再也不会出现这些漏洞报告了~~~~

然而有的小伙伴就会担心,我的项目有了漏洞,真的被攻击了(虽然我认为几率很小)怎么办?

那就只能老老实实的执行 npm audit fix 去修复了。

有的小伙伴又会说我执行完还是没有修复,那是什么原因呢?

为什么执行 npm audit fix 后还是没有修复

那是因为不是所有依赖都可以通过 npm 命令来更新解决漏洞。

比如有些包是 node-gyp 的第三方依赖包,这些不能通过 npm 命令来修改的,只能自己手动修复。

node_modules > node_gyp > package.json 中找到要更新的包,手动修改 package.json 中包的版本,修改到最新版本。然后运行 npm audit fix 即可。