当我跑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",
}

不再依赖洛达斯.所以它应该已经是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",所以版本是正确的,但漏洞仍然出现在审计列表中.

我还是个新手.js和那些消息让我很困惑.有没有办法手动修复它,或者清除那些我无法处理的消息?

推荐答案

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

audit报告所说的是,easy-extenderlodash个依赖项:

browser-sync > easy-extender > lodash        

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

audit报告重要性应手动判断.即使嵌套依赖项存在安全风险,这并不意味着使用了引入这种风险的功能.这也并不意味着即使使用了它,也会因其使用方式而带来真正的风险.

browser-sync是生产中没有使用的开发工具,没有太多的场景可以利用它的漏洞.Prototype Pollution根本不是一个漏洞,只是一个通知,说明一个包没有遵循良好的实践,它可以被忽略.

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

  • 做一次精神判断
  • 如果这是一个真正的问题,请判断易受攻击软件包的存储库中是否存在问题and PRs
  • 如果没有,提交一个问题
  • Forking 一个存储库或使用现有的PR作为git dependency,直到它在NPM版本中被修复
  • 如果是嵌套依赖项,请在多个嵌套级别执行此操作

大多数情况下,人们期望你不会超越一个健全的判断,唯一的问题是"漏洞"会扰乱审计报告,隐藏真正的漏洞.

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

可以在Yarn 1和2中的嵌套依赖中强制特定的依赖版本为resolutions field,这将影响审计报告.将来可能会这样做.目前,NPM的替代方案是第三方npm-force-resolutions公用事业公司,它提供较少的控制,目前它强制all dependencies, not a specific one的决议.

Notice that by forcing a dependency to use nested dependencies it wasn't designed to work with, it can become broken at any moment. This especially applies to 100, which is a blunt tool and can affect many nested dependencies at once.

Node.js相关问答推荐

NodeJS缓冲区大小逻辑:为什么默认是8KB,而不仅仅是数据大小?

在Node JS中获取控制台选项卡标题

对于具有重叠列的组合键,在冲突&q;上没有唯一或排除约束匹配错误

MongoDB的方面查询的Postgres类似功能

MongooseError[MissingSchemaError]:尚未为模型注册架构

如何在 node /快速服务器上配置 mongoDB

mongoose 7.0.3 使用运算符 $and 严格搜索日期

如何使用 Remix 仅在客户端呈现组件?

如何使用 $PATH 变量在系统中全局自动安装 bash 脚本?或者重写脚本到node

将代码转换为 ES6 Discord.js 的问题

当其中一个端点不工作时,如何使用 axios.all() 调用多个 API?

无法关闭 node.js 中的mongoose 连接

如果 express.js (node.js) http 请求在完成之前关闭会发生什么?

自定义 Docker 容器 Github 操作无法在 /github/workspace 中找到 Node 脚本

Mongoose:查找、修改、保存

如何从 Redis 保存和检索会话

如何为 node.js 服务器分配域名?

nodejs - 如何读取和输出 jpg 图像?

node.js 在控制台上显示未定义

NPM:为什么要安装这个包?