node.js - 如何手动修复 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.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 的新手,这些消息让我很困惑。有没有办法手动修复它或摆脱那些消息,我无能为力?
解决方案
lodash-cli
indevDependencies
不会影响browser-sync
项目中的工作方式,devDependencies
当软件包作为依赖项安装时会被忽略。
audit
报告说的是它具有easy-extender
依赖性lodash
:
browser-sync > easy-extender > lodash
它依赖于 Lodash 3,而问题在 Lodash 4 中得到修复。问题可以通过分叉easy-extender
、更新和安装它而不是来自 NPM 公共注册表的包来解决。但是这种依赖并没有真正的问题。
audit
报告重要性应手动评估。即使嵌套依赖存在安全风险,但这并不意味着使用了引入此风险的功能。这也不意味着即使使用它,由于使用方式也会带来真正的风险。
browser-sync
是一种不用于生产的开发工具,它的漏洞可以被利用的场景并不多。而且原型污染根本不是一个漏洞,只是一个包没有遵循良好实践的通知,它可以被忽略。
通常,这是修复报告的漏洞的方法:
- 进行健全性检查
- 如果这是一个真正的问题,请检查易受攻击包的存储库以查找现有问题和PR
- 如果没有,请提交问题
- 分叉一个存储库或使用现有 PR 作为git 依赖项,直到它在 NPM 版本中得到修复
- 在嵌套依赖项的情况下,在多个嵌套级别执行此操作
大多数情况下,您不会超越健全性检查,唯一的问题是“漏洞”会使审计报告变得混乱并隐藏真正的漏洞。
patch-package
可以帮助就地修补嵌套的依赖项,但这不会影响报告。
resolutions
可以通过field强制 Yarn 1 和 2 中嵌套依赖项中的特定依赖项版本,这将影响审计报告。将来可能会在 NPM中本地执行此操作。目前 NPM 中的替代方案是提供较少控制的第三方npm-force-resolutions
实用程序,目前它强制解决所有依赖项,而不是特定依赖项。
请注意,通过强制依赖项使用它不是设计为使用的嵌套依赖项,它可能随时被破坏。这尤其适用于npm-force-resolutions
,这是一个生硬的工具,可以同时影响许多嵌套的依赖项。
推荐阅读
- c# - [default] 关键字不适用于 C# 泛型类型返回值?
- java - 问题:由于缺少 ant-contrib-1.0b3.jar,无法创建任务或键入 thrift
- java - 使用 slick 和 hikariCP 的 SSL 连接
- angular - Angular 2 项目对 git 子模块的依赖
- snowflake-cloud-data-platform - 在雪花中放置多个仓库的最佳方法?
- sap - SAP Business Objects Webi 中有多个图表?
- javascript - Mongoose 对象在填充时返回未定义
- .net - 与 Azure 逻辑应用的连接已被远程主机关闭
- javascript - 在js中更改二维数组行的字体颜色
- maven - 强制 maven 始终从目标文件夹中获取工件