修复 package-lock.json 中定义的依赖项中潜在安全漏洞的正确方法

Posted

技术标签:

【中文标题】修复 package-lock.json 中定义的依赖项中潜在安全漏洞的正确方法【英文标题】:Proper way to fix potential security vulnerability in a dependency defined in package-lock.json 【发布时间】:2018-09-09 23:52:32 【问题描述】:

Github 在我的一个存储库中给了我这个错误。

We found a potential security vulnerability in one of your dependencies.
A dependency defined in ./package-lock.json has known security vulnerabilities 
and should be updated.

我们的package.json 文件中没有定义依赖关系。据我了解,删除package-lock.json 文件并重新生成它不是一个好习惯。但是,我看不到任何其他方法可以解决此问题。如果我忽略这个安全漏洞,它会在几天后再次出现。有任何想法吗?谢谢!

【问题讨论】:

***.com/questions/50053991/… Github potential security vulnerability error for hoek node module的可能重复 【参考方案1】:

据我了解,删除 package-lock.json 文件并重新生成它不是一个好习惯。

然而,在这种情况下通常会这样做。 参见例如angular/angular-cli issue 8534,由PR 8535解析。 这会导致像 frees-io/freestyle-opscenter-webclient 这样的依赖项目到 update its package-lock.json: PR 31。

【讨论】:

package-lock.json 的重新生成似乎并不能解决问题 @xianshenglu 好的,我会把答案留在那里,以防它对别人有帮助。 我收到关于旧提交中的包锁定的警告。我到底如何在不重写历史的情况下修复它? @destoryer 我不知道:尝试提出一个更详细的新问题(操作系统、npm 版本...) 这解决了我的问题。感谢您的提示。【参考方案2】:

新:现在,使用 npm@6 可以直接运行

npm audit fix

旧答案:

您应该尝试识别有问题的包的名称,然后运行

npm install package-name

显然要替换包名。

这将安装最新版本的软件包,并且通常最新版本已经修复了安全问题。如果您对版本有限制(例如:1.2),您可以随时尝试:

npm install package-name@^1.2

将安装最新的补丁版本

【讨论】:

...要“识别有问题的包的名称”,您可以运行npm ls vulnerability-name。这列出了漏洞依赖项,然后您可以对其进行更新/安装。 (正如@RileyManda 的回答中不太清楚地提到的那样) npm audit fix 现在为我彻底解决了这个问题。 它将在dependenciespackage.json 中添加package-name。我不想要这个。 大家请使用上面提到的 npm 审计修复【参考方案3】:

解决这个问题:

解决方案 1: 首先找到漏洞:使用你的终端: cd 进入你的项目,然后运行 ​​"npm ls hoek"

最后: npm install bcrypt@latest

然后将更新的项目推送到 git。(即执行新的提交)。

解决方案 2:

如果第一个选项/解决方案不能解决问题。请在 package-lock.json 中手动更改版本。 手动将版本从 2.16.3 更改为 4.2.1

"hoek": 
      "version":  "4.2.1",
      "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
      "dev": true

然后在 GitHub 上更新您的项目(提交/推送) 只需确保 package-lock.json 版本中出现的每个 hoek 版本都更改为 4.2.1

或者,如果你能找到一种方法来使用 npm 更改 hoek 版本/更新 hoek,这将使事情变得更简单。(类似于:npm update @hoek..version)..或卸载特定依赖,然后使用 bower 或 npm 重新安装。

【讨论】:

【参考方案4】:

解决此问题的最简单/最简单的方法是:

    npm install <dep> npm uninstall <dep> npm update npm install

发件人:https://github.com/Microsoft/vscode/issues/48783#issuecomment-384873041

【讨论】:

我的只是依赖项(package-lock.json),所以完成步骤 1 和 2 足以解决我的问题。干杯!【参考方案5】:

已知的安全漏洞,应该更新。

自 2019 年 5 月 23 日起,您现在拥有“Dependabot: Automated security fixes

通过 Dependabot 的集成,我们发布了自动安全修复程序作为公开测试版。

自动安全修复是由 GitHub 生成的拉取请求,用于修复安全漏洞。它们将工作流程中繁琐的部分自动化,让开发人员可以轻松地更新其依赖项。

在“Configuring automated security fixes”查看更多信息

注意:自动安全修复程序在测试版中可用,并且可能会发生变化。

您可以为任何使用安全警报和依赖关系图的存储库启用自动安全修复。 从 2019 年 5 月开始,我们将在接下来的几个月内自动在每个使用安全警报和依赖关系图的存储库中启用自动安全修复。

【讨论】:

我对那个机器人的结果好坏参半。我更喜欢手动执行npm audit 和/或npm audit fix @Fuhrmanator 好的。你在之前的评论中提到了medium.com/coinmonks/…?【参考方案6】:

这对我有用。 卸载所有依赖项并重新安装

例如

package.json 查看你的依赖列表


"name": "ebook-saler",
  "version": "1.0.0",
  "description": "App for selling ebooks",
  "main": "app.js",
  "scripts": 
    "start": "node app.js"
  ,
  "author": "Md Shayon",
  "license": "ISC",
  "dependencies": 
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "express-handlebars": "^3.1.0",
    "hoek": "^6.1.3",
    "stripe": "^7.5.0"
  

按照这个命令

npm uninstall body-parser express express-handlebars hoek stripe
npm install body-parser express express-handlebars hoek stripe
git commit -m "updated"
git push

【讨论】:

【参考方案7】:
    在 GitHub 上,导航到存储库的主页。 在您的存储库名称下,单击安全性。 点击您要查看的提醒。 查看漏洞的详细信息,并查看包含自动安全修复程序的拉取请求(如果有)。 或者,如果还没有针对警报的自动安全修复程序,要创建拉取请求来解决漏洞,请单击创建自动安全修复程序。 当您准备好更新依赖项并解决漏洞时,请合并拉取请求。

See details

【讨论】:

【参考方案8】:

在我使用 yarn 构建的项目中,我遇到了与 lodash 安全漏洞相同的问题。 Github 将这些标记为安全问题。

我尝试了上面@rileymanda 的答案,使用终端:cd into project,然后运行npm ls lodash

这发现在我的情况下,错误出现在 react-scripts 中。针对 react-scripts 和 lodash 问题的快速 Google 发现这是一个已知问题。

我尝试了各种通过纱线修复的方法 - 均未成功。 npm ls lodash 仍然显示 lodash 的易受攻击版本正在使用中。

阅读 Matt Turnbull's blog about improvements to npm 我从 yarn 切换回 npm。 (删除yarn.lock,删除./node_modules。运行npm install)。 npm ls lodash 现在显示正在使用的最新依赖版本 - 欢呼!提交到github,现在很高兴漏洞已经消失。

看起来 yarn 可能正在努力解决此类问题(或不打算这样做)。

如果您在使用 yarn 构建时遇到此问题,请尝试将 [back] 切换到 npm!

【讨论】:

【参考方案9】:

试试npm audit fix,它会解决很多警告

然后npm i [package.name]@xxx

例如:

"dependencies": 
  "lodash": ">=4.17.13"

npm i lodash@4.17.13

【讨论】:

以上是关于修复 package-lock.json 中定义的依赖项中潜在安全漏洞的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

警报安全 Github - 修复 yarn.lock/package-lock.json 漏洞的正确方法是啥

有啥方法可以修复 package-lock.json lockfileVersion 以便 npm 使用特定格式?

删除 `package-lock.json` 以快速解决冲突

你如何在 package-lock.json 中增加传递依赖

Angular 应用程序中需要 package.json、package-lock.json 文件

package-lock.json和package.json区别