如何手动修复 npm 漏洞?
How to fix npm vulnerabilities manually?
当我 运行 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 中还是新手,这些消息让我很困惑。有什么方法可以手动修复它或删除这些消息,我对此无能为力?
devDependencies
中的 lodash-cli
不会影响 browser-sync
在项目中的工作方式,devDependencies
在作为依赖项安装包时会被忽略。
audit
报告说的是 easy-extender
具有 lodash
依赖性:
browser-sync > easy-extender > lodash
它 depends on Lodash 3,而问题已在 Lodash 4 中修复。可以通过分叉 easy-extender
、更新并安装它而不是 NPM public 中的包来解决问题注册表。但是这种依赖没有真正的问题。
audit
报告重要性应手动评估。即使嵌套依赖存在安全风险,但这并不意味着使用了引入此风险的功能。这也不意味着即使使用它,也会因使用方式而带来真正的风险。
browser-sync
是开发工具,没有在生产中使用,其漏洞被利用的场景并不多。 Prototype Pollution根本不是一个漏洞,只是一个包没有遵循良好实践的通知,它可以被忽略。
通常,这是修复报告的漏洞的方法:
- 进行完整性检查
- 如果这是一个真正的问题,请检查易受攻击包的存储库是否存在问题和 PRs
- 如果有 none,请提交问题
- 分叉存储库或使用现有 PR 作为 git dependency 直到它在 NPM 版本中修复
- 在嵌套依赖项的情况下,在多个嵌套级别执行此操作
大多数情况下,您不会超越健全性检查,唯一的问题是“漏洞”会扰乱审计报告并隐藏真正的漏洞。
patch-package
可以帮助就地修补嵌套依赖项,但这不会影响报告。
可以使用 resolutions
field, this will affect audit report. It may be possible to do this in future. Currently the alternative in NPM is third-party npm-force-resolutions
utility that gives less control, currently it forces a resolution for all dependencies, not a specific one.
在 Yarn 1 和 2 的嵌套依赖项中强制使用特定的依赖项版本
请注意,通过强制依赖项使用嵌套依赖项,它不是设计用于工作的,它可能随时被破坏。这尤其适用于 npm-force-resolutions
,它是一个生硬的工具,可以同时影响许多嵌套的依赖项。
我的系统中出现的大部分问题都是由于 npm 包引起的。
我试过了,
npm un npm
您不必重新安装。
再运行编程。它对我有用。
如果您绝对确定要跳过审核,可以通过附加 --no-audit
npm install --no-audit
'npm audit fix' 将增加 package.json 中的依赖版本,这可能会导致代码中断。
所以更好的方法是打开 package-lock.json 并将 dependency/subdependency 版本更新为所需版本。在存储库中维护包-lock.json。
有时漏洞来自开发包,在这种情况下,请忽略这些漏洞,因为它们不会在生产中被发现。
使用这个
npm audit fix --force --production
可能会解决您的问题
我试过了,它对我有用,运行 以下命令:
> npm audit fix
> npm set audit false
你也可以像npm audit fix --force
那样使用武力。
当我 运行 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 中还是新手,这些消息让我很困惑。有什么方法可以手动修复它或删除这些消息,我对此无能为力?
devDependencies
中的 lodash-cli
不会影响 browser-sync
在项目中的工作方式,devDependencies
在作为依赖项安装包时会被忽略。
audit
报告说的是 easy-extender
具有 lodash
依赖性:
browser-sync > easy-extender > lodash
它 depends on Lodash 3,而问题已在 Lodash 4 中修复。可以通过分叉 easy-extender
、更新并安装它而不是 NPM public 中的包来解决问题注册表。但是这种依赖没有真正的问题。
audit
报告重要性应手动评估。即使嵌套依赖存在安全风险,但这并不意味着使用了引入此风险的功能。这也不意味着即使使用它,也会因使用方式而带来真正的风险。
browser-sync
是开发工具,没有在生产中使用,其漏洞被利用的场景并不多。 Prototype Pollution根本不是一个漏洞,只是一个包没有遵循良好实践的通知,它可以被忽略。
通常,这是修复报告的漏洞的方法:
- 进行完整性检查
- 如果这是一个真正的问题,请检查易受攻击包的存储库是否存在问题和 PRs
- 如果有 none,请提交问题
- 分叉存储库或使用现有 PR 作为 git dependency 直到它在 NPM 版本中修复
- 在嵌套依赖项的情况下,在多个嵌套级别执行此操作
大多数情况下,您不会超越健全性检查,唯一的问题是“漏洞”会扰乱审计报告并隐藏真正的漏洞。
patch-package
可以帮助就地修补嵌套依赖项,但这不会影响报告。
可以使用 resolutions
field, this will affect audit report. It may be possible to do this npm-force-resolutions
utility that gives less control, currently it forces a resolution for all dependencies, not a specific one.
请注意,通过强制依赖项使用嵌套依赖项,它不是设计用于工作的,它可能随时被破坏。这尤其适用于 npm-force-resolutions
,它是一个生硬的工具,可以同时影响许多嵌套的依赖项。
我的系统中出现的大部分问题都是由于 npm 包引起的。 我试过了,
npm un npm
您不必重新安装。
再运行编程。它对我有用。
如果您绝对确定要跳过审核,可以通过附加 --no-audit
npm install --no-audit
'npm audit fix' 将增加 package.json 中的依赖版本,这可能会导致代码中断。 所以更好的方法是打开 package-lock.json 并将 dependency/subdependency 版本更新为所需版本。在存储库中维护包-lock.json。
有时漏洞来自开发包,在这种情况下,请忽略这些漏洞,因为它们不会在生产中被发现。
使用这个
npm audit fix --force --production
可能会解决您的问题
我试过了,它对我有用,运行 以下命令:
> npm audit fix
> npm set audit false
你也可以像npm audit fix --force
那样使用武力。