gpt4 book ai didi

node.js - 如何手动修复 npm 漏洞?

转载 作者:IT老高 更新时间:2023-10-28 21:58:28 24 4
gpt4 key购买 nike

当我运行 npm install 时,它说 found 33 个漏洞(2 个低,31 个中等)
运行 `npm audit fix` 来修复它们,或运行 `npm audit` 了解详细信息

但是,npm audit fix 输出 在 11 秒内更新
修复了 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 │
└───────────────┴──────────────────────────────────────────────────────────────┘

在此示例中,链接页面的补救部分显示更新到版本 4.17.5 或更高版本。。但是,在 /node_modules/browser-sync/package.json 中有几行:

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

并且不再有 lodash 依赖项。所以它应该已经是 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 的新手,这些消息让我很困惑。有什么办法可以手动修复或删除那些我无能为力的消息吗?

最佳答案

devDependencies 中的

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

audit 报告说的是 easy-extender 具有 lodash 依赖项:

browser-sync > easy-extender > lodash        

depends on Lodash 3 ,而问题在 Lodash 4 中得到修复。问题可以通过 fork easy-extender、更新并安装它而不是 NPM 公共(public)注册表中的包来解决。但是这种依赖并没有真正的问题。

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

browser-sync 是一个不用于生产的开发工具,它的漏洞可以被利用的场景并不多。而且原型(prototype)污染根本不是漏洞,只是一个包没有遵循良好实践的通知,可以忽略。

通常,这是修复报告的漏洞的方法:

  • 进行完整性检查
  • 如果这是一个真正的问题,请检查易受攻击的软件包的存储库中是否存在现有问题 PRs
  • 如果没有,请提交问题
  • fork 存储库或使用现有 PR 作为 git dependency直到它在 NPM 版本中得到修复
  • 在嵌套依赖的情况下,在多个嵌套级别上执行此操作

大多数情况下,您不会超越健全性检查,唯一的问题是“漏洞”会使审计报告困惑并隐藏真正的漏洞。

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

可以使用 resolutions field 在 Yarn 1 和 2 的嵌套依赖项中强制特定依赖项版本,这会影响审计报告。可能会这样做natively in NPM在未来。目前 NPM 中的替代方案是第三方 npm-force-resolutions控制较少的实用程序,目前它强制解决 all dependencies, not a specific one .

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

关于node.js - 如何手动修复 npm 漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51377148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com