如何手动修复npm漏洞?

2024-01-30

当我跑步时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": "[email protected] /cdn-cgi/l/email-protection",

我相信“_id”中显示的版本,而不是“_from”中显示的版本,因此版本是正确的,但漏洞仍然出现在审核列表中。

我对 Node.js 还是个新手,这些消息让我很困惑。有什么方法可以手动修复它或删除那些我无能为力的消息吗?


lodash-cli in devDependencies不影响如何browser-sync在你的项目中工作,devDependencies当包作为依赖项安装时将被忽略。

What audit报告说这是easy-extender具有lodash依赖性:

browser-sync > easy-extender > lodash        

It 取决于 Lodash 3 https://github.com/shakyShane/easy-extender/blob/master/package.json#L32,而该问题在 Lodash 4 中已得到解决。该问题可以通过分叉来解决easy-extender,更新并安装它,而不是从 NPM 公共注册表安装包。但这种依赖性并没有真正的问题。

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

browser-sync是未在生产中使用的开发工具,因此其漏洞可被利用的场景并不多。和原型污染根本不是一个漏洞,只是一个软件包不遵循良好实践的通知,可以忽略。

一般来说,修复报告的漏洞的方法如下:

  • 进行健全性检查
  • 如果确实存在问题,请检查易受攻击的包的存储库中是否存在问题and PRs
  • 如果没有,请提交问题
  • 分叉存储库或使用现有 PR 作为git 依赖 https://docs.npmjs.com/cli/install直到它在 NPM 版本中修复
  • 如果存在嵌套依赖关系,请在多个嵌套级别执行此操作

大多数时候,我们预计您不会超越健全性检查,唯一的问题是“漏洞”使审计报告变得混乱并隐藏了真正的漏洞。

patch-package https://github.com/ds300/patch-package可以帮助就地修补嵌套依赖项,但这不会影响报告。

可以在 Yarn 1 和 2 的嵌套依赖项中强制使用特定的依赖项版本resolutions field https://classic.yarnpkg.com/lang/en/docs/selective-version-resolutions/,这会影响审计报告。也许可以这样做原生于 NPM https://stackoverflow.com/questions/52416312/npm-equivalent-of-yarn-resolutions在未来。目前 NPM 中的替代方案是第三方npm-force-resolutions https://github.com/rogeriochaves/npm-force-resolutions提供较少控制的实用程序,目前它强制解决所有依赖项,而不是特定依赖项 https://github.com/rogeriochaves/npm-force-resolutions/issues/32.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何手动修复npm漏洞? 的相关文章

  • 如何配置 Google 计算引擎以对 Nodejs 服务器使用 HTTPS?

    我想使用 https SSL 在 google 计算引擎中运行 nodejs 和 socket io 服务器 我安装了自签名证书https cloud google com compute docs load balancing http
  • 在node.js中加载并执行外部文件

    从另一个节点js文件运行一个节点js文件是否容易 可能 例如 我有两个文件 test1 js 和 test2 js 我想从 test2 js 执行 test1 js 文件 我认为完成你想做的事情的更好方法是按照我的其他答案建议的去做 但是要
  • Node js 使用中间件重定向进行过多重定向

    在我的 Node js 应用程序 我使用的是express 4 x 中 我想检查用户是否已登录 如果用户未登录 我想重定向到我的登录页面 然后我在中间件中这样做 服务器 js app use function req res next if
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 如何在node.js中的一定时间后强制解决承诺? [复制]

    这个问题在这里已经有答案了 我正在尝试从其 url 下载大量图像 然后在 Node js 中创建一个 PDF 文件 我正在使用图片下载器 https www npmjs com package image downloader模块下载承诺链
  • 猫鼬不创建索引

    我最近开始使用 Mongoose v 3 2 1 但我遇到了索引问题 我在我的模式 Schema path attr index true 上定义了几个索引 但它们不是在数据库中创建的 我在 shell 中运行 db collection
  • Phonegap使用命令行工具添加插件

    我是phonegap的新手 我按照phonegap官方网站中定义的步骤使用命令行工具创建项目 nodejs 我成功创建项目并添加平台 但是 当我尝试添加插件时出现以下错误 命令 cordova plugin add https git wi
  • 如何强制 pm2 在特定时间后重新启动?

    我在用PM2让我的 Node js 应用程序保持运行 有什么办法可以拥有PM2每 1 小时重新启动一次我的应用程序 将下面的代码放入pm2 js并开始它pm2 start pm2 js var pm2 require pm2 pm2 con
  • 运行“npm install”:Node-gyp 错误 - MSBUILD.exe 失败,退出代码:1

    我在跑npm install在 Windows 上安装我的项目中的所有软件包 然后我收到有关 MSBUILD exe 的错误 gyp ERR stack Error C Program Files x86 Microsoft Visual
  • Google App Engine - 节点:找不到模块“firebase-admin”

    第一次在这里部署 GAE 应用程序 我尝试遵循本教程 https firebase googleblog com 2016 08 sending notifications Between android html https fireba
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o
  • 如何在Windows的node js中设置默认时区

    我正在尝试在应用程序启动时设置时区 set TZ UTC node main js 但这不起作用 main js var tz process env TZ var date new Date console log tz date UTC
  • FFMPEG:使用具有复杂滤波器的视频滤波器

    我正在使用fluent ffmpeg用于对视频文件执行批量操作的 Node js 库 视频过滤器裁剪 16 9 输入 添加填充并将字幕刻录到填充中 在下一步中 我想使用复杂的滤镜来覆盖图像作为水印 ff input video mp4 ff
  • “gulp”不被识别为内部或外部命令

    我正在尝试使用Gulp http gulpjs com and Node Js https nodejs org en 流式传输我的生产过程中缩小和连接 CSS JS 文件的过程 这是我所做的 我安装了Node Js https nodej
  • 使用 enctype="multipart/form-data" 时出现 CSRF 错误

    每当我将 enctype multipart form data 添加到我的 html 表单中时 我得到ForbiddenError invalid csrf token 如果我删除 enctype 它就可以工作 我发送的 csrf 代码如
  • 缓存消息discord.js

    我想做一些反应角色 但为此 我必须缓存机器人启动之前发送的消息 我尝试过channel messages fetch 但到目前为止还没有奏效 我当前的代码 client on messageReactionAdd async reactio
  • 通过 Amazon SQS 将压缩文本从 PHP 发送到 NodeJS

    我似乎一直坚持通过 Amazon SQS 将压缩消息从 PHP 发送到 NodeJS 在 PHP 方面我有 SQS gt sendMessage Array QueueUrl gt queueUrl MessageBody gt artic
  • 401 未经授权的帖子回复

    我一直在使用 Angular 模板制作 Node js 网站 但我无法在 DB Mongo 上创建数据 这是代码 节点路由 var Property mongoose model Property var jwt require expre

随机推荐