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


88

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



Answers:


67

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

npm audit fix

旧答案:

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

npm install package-name

显然,替换软件包名称。

这将安装软件包的最新版本,并且大多数情况下,最新版本已修复了安全问题。如果您对版本有限制(例如:1.2),则可以始终尝试:

npm install package-name@^1.2

并且将安装最新的修补版本


1
...并“确定有问题的软件包名称”,可以运行npm ls vulnerability-name。这列出了漏洞依赖者,您可以随后对其进行更新/安装。(如@RileyManda的答案中相当不清楚地提到的)
Sjeiti

1
npm审核修复程序现在可以为我彻底解决此问题。
Kaito

9
这将增加package-namedependenciespackage.json。我不要这个
slideshowp2

7

要解决此问题:

解决方案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(commit / push)上更新项目,只需确保package-lock.json版本中出现的每个hoek版本都更改为4.2.1。

或者,如果您能找到一种使用npm更改hoek版本/更新hoek的方法,则将使事情变得更加简单。(例如:npm update @ hoek..version)..或卸载特定的依赖项,然后使用bower或npm。


4

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

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

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

我尝试了各种通过纱线固定的方法-均未成功。 npm ls lodash仍显示lodash的易受攻击版本。

阅读了Matt Turnbull的有关npm改进的博客后,我从yarn切换回了npm。(删除yarn.lock,删除./node_modules。运行npm install)。npm ls lodash现在显示正在使用的最新依赖版本-hurrah!致力于github,现在很高兴该漏洞消失了。

似乎纱线可能正在努力解决这些问题(或不打算这样做)。

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


3

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

但是,这通常是在这种情况下要做的。
参见例如angular / angular-cli问题8534,由PR 8535解决。
这导致像一个相关项目frees-io/freestyle-opscenter-webclient,以更新其package-lock.json:PR 31


包lock.json的再生似乎并不能解决万阿英,蒋达清
xianshenglu

@xianshenglu好吧,我将答案留在这里,以防它对其他人有帮助。
VonC

我收到旧提交中的程序包锁定警告。我到底该如何改写历史中的某些内容而不重写它?
pishpish

@destoryer我不知道的:尝试提出一个更详细的新问题(操作系统,npm版本,...)
VonC

1
那解决了我的问题。谢谢你的提示。
丰富


1

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

自2019年5月23日起,您现在拥有“ Dependabot:自动安全修复程序

通过Dependabot的集成,我们已经发布了自动安全修复程序作为公共Beta。

自动化安全修复程序是GitHub生成的拉出请求,用于修复安全漏洞。
它们使工作流程中繁琐的部分自动化,并使开发人员轻松保持其依赖关系为最新。

请参阅“配置自动安全修复程序”中的更多信息。

注意:自动安全修复程序在beta中可用,并且可能会更改。

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


我对该机器人的评价参差不齐。我更喜欢手动执行npm audit和/或npm audit fix
Fuhrmanator

@Fuhrmanator好。您在先前的评论中提到了medium.com/coinmonks/…吗?
VonC

0

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

例如

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

0
  1. 在GitHub上,导航到存储库的主页。
  2. 在您的存储库名称下,单击安全性。
  3. 点击您要查看的警报。
  4. 查看漏洞的详细信息,以及包含自动安全修复程序的拉取请求(如果有)。
  5. 或者,如果还没有针对警报的自动安全修复程序,则要创建拉取请求以解决漏洞,请单击“创建自动安全修复程序”。
  6. 准备好更新依赖关系并解决漏洞时,请合并拉取请求。

查看详细信息


0

试试看npm audit fix,它将解决许多警告

然后 npm i [package.name]@xxx

例如:

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

npm i lodash@4.17.13

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.