修复 npm 漏洞
我正在学习 TypeScript 教程。
不幸的是,这些软件包已经过时,我收到了有关漏洞的警告。
我遵循了 npm check and update package if need 的一系列建议,即:
-
npm 审核修复
- < code>npmauditfix --force
-
npmupdate
npmaudit
表示还剩下 24 个漏洞。
但上述命令都无法修复它们。
npm outdated
导致没有输出。
易受攻击的软件包是:
ansi-regex
glob-parent
node-forge
nth-check
postcss
我实际上不知道为什么它们是我的项目的一部分。
我的 package.json
中没有它们。
修复这些漏洞的后续步骤是什么?
以下是我尝试过的。
- 如何修复 npm 漏洞? 没有答案。
- 手动将
package.json
中的依赖项更新为较新版本,然后运行 npm install
。它没有效果。 - 按照建议删除
package-lock.json
此处,然后再次运行npm install
。 - 添加“ansi-regex”:“^ 6.0.1”,“glob-parent”:“^ 6.0.2”,“node-forge”:“^ 1.3.0”,“nth-check”:“ ^2.0.1", "postcss": "^8.4.12" 作为 devDependency 并运行
npm install
。 - 按照如何修复 npm 漏洞中的建议运行
npm @latest
。 - 如何修复 npm 漏洞?尝试了两种方法,问题依旧
没有任何新的建议。 - 在检查 npm 审核时,我发现了 5 个中等严重程度的漏洞
这也没有建议任何新命令。 - 运行
npm update glob-parent --depth 2
只是为了发现--depth
已被弃用,并且 npm 始终 更新任何深度 [GitHub]。 - 运行
npm prune
。 - 删除
node_modules
文件夹并再次运行npm install
。
您可以在空目录中使用以下 package.json
并运行 npm install
来重现我的最新状态。
{
"name": "pacman",
"version": "0.0.1",
"description": "I just follow a tutorial. Nothing of interest.",
"keywords": ["game"],
"license": "MIT",
"author": "someone stupid",
"scripts": {
"build": "parcel build index.html",
"dev": "parcel index.html --open",
"start": "npm run build && npm run dev",
"test": "echo \"Error: no test specified\" && exit 1"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.16.0",
"@typescript-eslint/parser": "^5.16.0",
"ansi-regex": "^6.0.1",
"eslint": "^8.12.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.0.0",
"glob-parent": "^6.0.2",
"node-forge": "^1.3.0",
"nth-check": "^2.0.1",
"parcel": "^2.4.0",
"parcel-bundler": "^1.12.5",
"postcss": "^8.4.12",
"prettier": "^2.6.1",
"typescript": "^4.6.3"
},
"dependencies": {
"npm": "^8.5.5"
}
}
在撰写本文时,运行 npm 版本 8.5.5 时,您应该会发现 24 个漏洞,其中 18 个中度漏洞和 6 个高漏洞。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据评论,我已经尝试了一般情况下的所有命令,在这种情况下,您需要开始分析单个包。
那么,我做了什么?
接下来,通过删除一半依赖项来执行二分搜索,并重复以下步骤
node_modules
文件夹npm install
npmaudit
进行检查 。如果没有漏洞,请添加要安装的剩余软件包的一半
如果存在漏洞,请删除当前正在安装的一半软件包。
就我而言,这个过程将其归结为以下两行:
对于
parcel-bundler
,NPM 发出警告:所以我想我不需要
parcel-bundler
> 根本没有,因为它已经集成到parcel
包中,我已经在前面的步骤中将其更新到版本 2。As per the comments, I have already tried all commands for the general case, in which case you need to start analyzing individual packages.
So, what did I do?
Next, perform a binary search by removing half of the dependencies and repeating the following steps
node_modules
foldernpm install
npm audit
to check for the vulnerabilitiesIf there are no vulnerabilites, add the half of the remaining packages you want to install.
If there are vulnerabilities, remove the half of the packages you are currently installing.
In my case, this process boiled it down to the following two lines:
For
parcel-bundler
, NPM spit out a warning:So I guess I don't need
parcel-bundler
at all, because it has been integrated into theparcel
package, which I had already updated to version 2 in an earlier step.尝试使用此命令更新所有 npm。它帮助了我
Try to update all your npm with this command. It helped me
正如您的自我回答中所述,
parcel-bundler
软件包已被弃用:事实上,npm 包< em>名称已更改,从
parcel-bundler
更改为parcel
。将它们放在同一个
package.json
中意味着两次拥有完全相同的包的两个不同版本,因此在这种情况下,“已弃用”一词相当具有误导性。重现您的发现——我们可以相信审计报告吗?
感谢您在问题中包含
package.json
。这样做可以重现您的发现。
我运行
npm install npm@latest -g< /code>
,然后是
npm --version
,它响应10.2.3
。在一个空目录中,我添加
package.json
的一个版本,然后运行 npm install
。 1package.json
:为了确保我拥有所有软件包的最新版本,然后运行
npx npm-check-updates
,后跟npx npm-check -更新-u
和npm install
。响应显示
59 个漏洞(47 个中等,12 个高)
,并建议“运行`npmaudit`以获取详细信息”。
接下来我运行
npmaudit
。以下是生成的 npm 审核安全报告的开头。
由于
parcel-bundler
已过时,我将其从package.json
中删除。但是运行 npm install 并不会给出干净的报告。
它仍然显示
11个中等严重程度的漏洞
。运行
npmauditfix
既不会改变package.json
也不会改变package-lock.json
。运行
npmauditfix --force
一次会将package.json
中的parcel
从^ 降级2.10.2
至^1.12.4
。package-lock.json
的大小从 255 kB 增加到 477 kB。运行
npmauditfix --force
两次(第二次)从^1.12.4< 重新升级
parcel
/code> 返回到package.json
中的^2.10.2
。它将
package-lock.json
的大小从 477 kB 减小到 184 kB。 2这也会导致
发现 0 个漏洞
:我觉得这很了不起。
修复所有漏洞并运行 npm install 不足以获得干净的报告。
然后,您还需要运行
npmauditfix--force
两次。 3参考文献
parcel-bundler
已弃用的答案parcel-bundler
是已弃用parcel-bundler
1
由于您添加了包
ansi-regex
、glob-parent
、node-forge
、nth-check
和postcss
作为直接 devDependency,我决定通过从package.json
中删除它们来撤消它们。我还删除了对
npm@^8.5.5
的依赖,我相信这源于您运行npm i npm@latest
,它安装了npm
< em>本地。相比之下,我总是仅在全局安装
npm
,npm i npm --global
。2
package-lock.json
运行npmauditfix --force
之前和运行两次之后的唯一区别,就是很多包被删除了。我假设删除的是
parcel-bundler
依赖的包。因此,npm install
本身不会删除这些软件包。3
第三次运行
npmauditfix --force
不会更改package.json
或package- lock.json 不再是了。
似乎一旦达到“0 个漏洞”状态,命令 npmauditfix --force 就不会引起任何更多更改。
这是有道理的。
As noted in your self-answer, the
parcel-bundler
package is deprecated :In fact, the npm package name has changed from
parcel-bundler
toparcel
.Having them both in the same
package.json
means having two different versions of the exact same package twice, so the word deprecated is rather misleading in this case.Reproducing your findings – can we trust the audit report?
Thanks for including the
package.json
in your question.Doing so makes it possible to reproduce your findings.
I run
npm install npm@latest -g
, and thennpm --version
, which responds10.2.3
.In an empty directory, I add a version of your
package.json
, then runnpm install
. 1package.json
:To make sure I have the latest versions of all packages, I then run
npx npm-check-updates
, followed bynpx npm-check-updates -u
andnpm install
.The response says
59 vulnerabilities (47 moderate, 12 high)
,and suggests to "Run `npm audit` for details".
So next I run
npm audit
.Here is the beginning of the resulting npm audit security report.
Since
parcel-bundler
is obsolete, I remove it frompackage.json
.But running
npm install
doesn't give a clean report.It still says
11 moderate severity vulnerabilities
.Running
npm audit fix
neither changespackage.json
norpackage-lock.json
.Running
npm audit fix --force
once downgradesparcel
inpackage.json
from^2.10.2
to^1.12.4
.The size of
package-lock.json
increases from 255 kB to 477 kB.Running
npm audit fix --force
twice (a second time) re-upgradesparcel
from^1.12.4
back to^2.10.2
inpackage.json
.It decreases the size of
package-lock.json
from 477 kB to 184 kB. 2This also results in
found 0 vulnerabilities
:I find this remarkable.
Fixing all the vulnerabilities and running
npm install
is not enough to get a clean report.You then also need to run
npm audit fix --force
twice. 3References
parcel-bundler
is deprecatedparcel-bundler
is deprecatedparcel-bundler
1
Since you added the packages
ansi-regex
,glob-parent
,node-forge
,nth-check
, andpostcss
as direct devDependencies, I decided to undo that by removing them frompackage.json
.I also removed the dependency on
npm@^8.5.5
, which I believe stems from you runningnpm i npm@latest
which installsnpm
locally.By contrast, I always install
npm
only globally,npm i npm --global
.2
The only difference in
package-lock.json
before runningnpm audit fix --force
and after running it twice, is that a lot of packages have been removed.I'd assume that the ones removed are packages that
parcel-bundler
depends on. Thus,npm install
alone does not remove these packages.3
Running
npm audit fix --force
a third time does not changepackage.json
orpackage-lock.json
anymore.It seems that once a state of "0 vulnerabilities" is reached, the command
npm audit fix --force
doesn't induce any more changes.This makes sense.