如何手动修复 npm 漏洞?

新手上路,请多包涵

当我运行 npm install 它说 found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details

但是, npm audit fix 输出 up to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

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",
}

并且不再有 lodash 依赖项。所以它应该已经是 v4.17.5。我还检查了 /node_modules/lodash/lodash.jsonvar VERSION = '4.17.10'; 行。在 /node_modules/lodash/package.json 中有这些行:

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

我相信“_id”中显示的版本,而不是“_from”中显示的版本,所以版本是正确的,但漏洞仍然出现在审核列表中。

我还是 node.js 的新手,这些消息让我很困惑。有没有办法手动修复它或摆脱那些消息,我无能为力?

原文由 Jakupov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

lodash-clidevDependencies 不会影响 browser-sync 在您的项目中的工作方式, devDependencies a 依赖项在安装时会被忽略

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 字段 在 Yarn 1 和 2 中的嵌套依赖项中强制特定依赖项版本,这将影响审计报告。将来可能会 在 NPM 中本地 执行此操作。目前 NPM 中的替代方案是第三方 npm-force-resolutions 提供较少控制的实用程序,目前它强制解决 所有依赖项,而不是特定依赖 项。

请注意,通过强制依赖项使用它不是设计为使用的嵌套依赖项,它可能随时被破坏。这尤其适用于 npm-force-resolutions ,这是一个生硬的工具,可以同时影响许多嵌套依赖项。

原文由 Estus Flask 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 40Sherrin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏