如何手动修复 npm 漏洞?

当我运行 npm install时,它显示 < code > 发现了33个漏洞(2个低漏洞,31个中等漏洞) 运行“ npm 审计修复程序”来修复它们,或者“ npm 审计”来查看详细信息 .

然而,npm audit fix输出 < code > 在11s 内更新 修复了24653个扫描包中33个漏洞中的0个 33个漏洞需要人工检查,无法更新

这是否意味着 review不应该由用户修复?

当我运行 npm audit时,它会给我一个表列表,类似于下面这样:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

在这个例子中,补救部分的链接页面说 Update to version 4.17.5 or later.。然而,在 /node_modules/browser-sync/package.json有行:

"devDependencies": {
"lodash-cli": "4.17.5",
}

不再依赖于任何东西。所以它应该已经是 v4.17.5了。我还检查了 /node_modules/lodash/lodash.json,它有 var VERSION = '4.17.10';线。在 /node_modules/lodash/package.json中有以下几行:

  "_from": "lodash@^4.17.4",
"_id": "lodash@4.17.10",

我相信该版本显示在“ _ id”中,而不是“ _ from”中,所以版本是正确的,但漏洞仍然出现在审计列表中。

我对 node.js 还是个新手,这些信息让我很困惑。有没有什么方法可以手动修复或者删除那些我无法处理的信息?

192432 次浏览

devDependencies中的 lodash-cli不影响 browser-sync在项目中的工作方式,当包作为依赖项安装时,devDependencies将被忽略。

audit报告说 easy-extenderlodash有依赖性:

browser-sync > easy-extender > lodash

它是 取决于 Lodash 3,而这个问题在 Lodash 4中得到了解决。这个问题可以通过分叉 easy-extender、更新和安装它来解决,而不是从 NPM 公共注册中心安装包。但这种依赖性并没有真正的问题。

audit报告的重要性应手动评估。即使嵌套依赖具有安全风险,这也不意味着使用了引入这种风险的特性。这也并不意味着即使它被使用,它也会因为它的使用方式而带来真正的风险。

browser-sync是没有在生产中使用的开发工具,没有那么多可以利用其漏洞的场景。而且 原型污染根本不是一个漏洞,只是一个包不遵循良好实践的注意,它可以被忽略。

一般来说,这是修复所报告的漏洞的方法:

  • 做个心智检查
  • 如果这是一个真正的问题,请检查现有问题 还有 PR 的脆弱包存储库
  • 如果没有,提交一个问题
  • 分叉存储库或使用现有的 PR 作为 Git 依赖,直到它在 NPM 版本中得到修复
  • 在嵌套依赖项的情况下,在嵌套的几个级别执行此操作

大多数情况下,预计您不会超出健全检查的范围,唯一的问题是“漏洞”会使审计报告杂乱无章,并隐藏真正的漏洞。

patch-package 可以帮助就地修补嵌套依赖项,但这不会影响报告。

使用 resolutions可以在纱线1和纱线2的嵌套依赖关系中强制使用特定的依赖关系版本,这将影响审计报告。将来也许可以做这个 在新公共管理机构。目前在 NPM 的替代方案是第三方 npm-force-resolutions实用程序,给予较少的控制,目前它迫使一个解决方案的 所有的依赖,而不是一个特定的

请注意,通过强制依赖项使用嵌套的依赖项,它可能在任何时候变得不可用。这尤其适用于 npm-force-resolutions,它是一个钝工具,可以同时影响许多嵌套的依赖关系。

在我的系统中发生的大部分问题是由于 npm 包引起的。 我尽力了,

npm un npm

您不必再次安装。

再运行一次程序,对我管用。

如果您完全确定要跳过审计,您可以通过附加—— no-audit 来做到这一点

 npm install --no-audit

资料来源: 文件

案件可能是

  • 假阳性
  • 对你的特定环境没有影响的漏洞
  • 存在于你没有使用的部分代码中的漏洞

假阳性进一步读数

错误的上下文进一步阅读

2022年最新情况

或者,您可以使用 更好的 NPM 审核对审计进行微观管理

“ npm 审计修复”将增加 package.json 中依赖项的版本,这可能导致代码中断。 因此,更好的方法是打开 package-lock. json 并将依赖项/子依赖项版本更新为所需的版本。

有时候漏洞来自开发包,在这种情况下忽略这些漏洞,因为这些漏洞在生产中没有被发现。

用这个

Npm 审核修复——强制——生产

也许能解决你的问题

我尝试了这个,它为我工作,运行以下命令:

> npm audit fix
> npm set audit false

你也可以像 npm audit fix --force一样使用武力。