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

Proper way to fix potential security vulnerability in a dependency defined in package-lock.json

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 文件并重新生成它不是一个好习惯。但是,我看不到任何其他方法来解决此问题。如果我忽略此安全漏洞,它将在几天后再次出现。有任何想法吗?谢谢!

To my understanding it isn't good practice to delete the package-lock.json file and regenerate it.

然而,在这种情况下通常会这样做。
例如参见 [​​=13=].
这会导致像 frees-io/freestyle-opscenter-webclient to update its package-lock.json: PR 31.

这样的依赖项目

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

npm audit fix

旧答案:

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

npm install package-name

替换包名,很明显。

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

npm install package-name@^1.2

并且会安装最新的补丁版本

要解决此问题:

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

最后: npm 安装 bcrypt@latest

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

方案二:

如果第一个 option/solution 没有在您的包中手动解析 issue.Change 版本-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(commit/push) 上更新您的项目 只需确保您的包中出现的每个 hoek 版本 -lock.json 版本都更改为 4.2.1

或者,如果您能想出一种使用 npm 更改 hoek version/update hoek 的方法,将使事情变得更加简单。(类似于:npm update @hoek..version)..或卸载特定依赖项,然后使用 bower 或 npm 重新安装它。

simplest/easiest 解决此问题的方法是:

  1. npm install <dep>
  2. npm uninstall <dep>
  3. npm update
  4. npm install

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

known security vulnerabilities and should be updated.

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

Through the integration of Dependabot, we’ve released automated security fixes as a public beta.

Automated security fixes are pull requests generated by GitHub to fix security vulnerabilities.
They automate a tedious part of the workflow and make it easy for developers to keep their dependencies up to date.

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

Note: Automatic security fixes are available in beta and are subject to change.

You can enable automatic security fixes for any repository that uses security alerts and the dependency graph.
We'll automatically enable automatic security fixes in every repository that uses security alerts and the dependency graph over the next few months, starting in May 2019.

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

例如

来自 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
  1. 在 GitHub 上,导航到存储库的主页。
  2. 在您的存储库名称下,单击“安全”。
  3. 点击您要查看的提醒。
  4. 查看漏洞的详细信息以及包含自动安全修复程序的拉取请求(如果可用)。
  5. 或者,如果警报还没有自动安全修复程序,要创建拉取请求来解决漏洞,请单击创建自动安全修复程序。
  6. 当您准备好更新依赖项并解决漏洞时,合并拉取请求。

See details

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

我尝试了上面@rileymanda 的答案,使用终端:cd 进入项目,然后 运行 npm ls lodash.

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

我尝试了各种方法来通过 yarn 修复 - 都没有成功。 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 构建时遇到此问题,请尝试 [返回] 切换到 npm!

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

然后 npm i [package.name]@xxx

例如:

"dependencies": {
  "lodash": ">=4.17.13"
}

npm i lodash@4.17.13