当我跑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相关问答推荐

在child_Process中持久运行SSH命令

查询嵌套数组中的最后一个元素具有特定值的mongoDB集合中的文档

自动将Selify打开的Chrome窗口移动到Mac OS中的第三个显示器

Node.js PNG缓冲区获取未知图像格式错误

Cypress.io - 如何等待返回调用属性的方法的结果?

当try 将 formData 转换为 express js 时,服务器无法识别 multipart/form-data

找不到react 模块:错误:默认条件应该是最后一个

结合后端(Express)和前端(Angular)路由

对 google api v3 的 Axios 请求返回加密(?)数据

如何删除mongodb中嵌套数组中所有出现的数组元素

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

如何让我的 Next.js 应用在运行 ubuntu-latest 的 Azure 应用服务中启动?

使用 mongoose 查找过go 7 天的注册用户总数

npm 不会安装 express 吗?

什么使用/尊重 .node-version 文件?

socket.io 发出回调合适吗?

如何在 Node.js 中等待子进程完成

如何让should.be.false语法通过 jslint?

如何从 findOneAndUpdate 方法中获取更新的文档?

NodeJS:如何调试检测到 EventEmitter 内存泄漏.添加了 11 个侦听器