Der richtige Weg, um eine potenzielle Sicherheitslücke in einer in package-lock.json definierten Abhängigkeit zu beheben


88

Github hat mir diesen Fehler in einem meiner Repositories gegeben.

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.

Die Abhängigkeit ist in unserer package.jsonDatei nicht definiert . Nach meinem Verständnis ist es nicht empfehlenswert, die package-lock.jsonDatei zu löschen und neu zu generieren. Ich kann jedoch keinen anderen Weg finden, um dieses Problem zu beheben. Wenn ich diese Sicherheitslücke schließe, wird sie einige Tage später erneut angezeigt. Irgendwelche Ideen? Vielen Dank!



Antworten:


67

Neu: Jetzt können Sie mit npm @ 6 direkt ausführen

npm audit fix

Alte Antwort:

Sie sollten versuchen, den Namen des problematischen Pakets zu identifizieren, und dann ausführen

npm install package-name

offensichtlich den Paketnamen ersetzen.

Dadurch wird die neueste Version des Pakets installiert, und sehr oft hat die neueste Version das Sicherheitsproblem behoben. Wenn Sie eine Einschränkung für die Version haben (z. B. 1.2), können Sie immer versuchen:

npm install package-name@^1.2

und die neueste gepatchte Version wird installiert


1
... und um den Namen des problematischen Pakets zu identifizieren, können Sie ausführen npm ls vulnerability-name. Hier werden die Schwachstellenabhängigen aufgelistet, die Sie dann aktualisieren / installieren können. (wie in @ RileyMandas Antwort ziemlich unklar erwähnt)
Sjeiti

1
npm audit fix behebt dieses Problem jetzt sauber für mich.
Kaito

9
Es fügt package-namein dependenciesder package.json. Ich will das nicht
Slideshowp2

7

So beheben Sie dieses Problem:

Lösung 1: Finden Sie zuerst die Sicherheitsanfälligkeit: Verwenden Sie Ihr Terminal: cd in Ihrem Projekt und führen Sie dann "npm ls hoek" aus.

Und zum Schluss: npm install bcrypt @ latest

Drücken Sie dann das aktualisierte Projekt auf git (dh führen Sie ein neues Commit durch).

Lösung 2:

Wenn die erste Option / Lösung das Problem nicht behebt. Ändern Sie die Version manuell in Ihrer package-lock.json. Ändern Sie Ihre Version manuell von 2.16.3 auf 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

Aktualisieren Sie dann Ihr Projekt auf GitHub (Commit / Push). Stellen Sie einfach sicher, dass jedes Auftreten einer Hoek-Version in Ihrer package-lock.json-Version in 4.2.1 geändert wird

Wenn Sie alternativ einen Weg finden, um die Hoek-Version zu ändern / Hoek mit npm zu aktualisieren, wird dies die Dinge viel einfacher machen (etwa: npm update @ hoek..version ). Oder Sie deinstallieren die spezifische Abhängigkeit und installieren sie mit bower oder neu npm.


4

Ich hatte das gleiche Problem mit einer Sicherheitslücke in Lodash in einem Projekt, das ich mit Garn baute. Github bezeichnete diese als Sicherheitsbedenken.

Ich habe die Antwort von @rileymanda oben mit einem Terminal versucht: cd in project, dann ausführen npm ls lodash.

Dies ergab, dass in meinem Fall der Fehler in Reaktionsskripten lag . Schnelles Google für Probleme mit React-Skripten und Lodash stellte fest, dass dies ein bekanntes Problem war.

Ich habe versucht, verschiedene Dinge mit Garn zu reparieren - alles ohne Erfolg. npm ls lodashzeigte immer noch die anfällige Version von lodash im Einsatz.

Nachdem ich Matt Turnbulls Blog über Verbesserungen an npm gelesen hatte, wechselte ich von Garn zurück zu npm. (Löschen yarn.lock, löschen ./node_modules. Ausführen npm install). npm ls lodashJetzt wurden die neuesten Abhängigkeitsversionen verwendet - Hurra! Dem Github verpflichtet, und es war jetzt froh, dass die Verwundbarkeit verschwunden war.

Es sieht so aus, als ob Garn Schwierigkeiten hat, solche Probleme zu lösen (oder nicht beabsichtigt ist).

Wenn dieses Problem beim Bauen mit Garn auftritt, versuchen Sie, [zurück] auf npm umzuschalten!


3

Nach meinem Verständnis ist es nicht empfehlenswert, die Datei package-lock.json zu löschen und neu zu generieren.

Dies wird jedoch normalerweise in diesem Fall getan.
Siehe zum Beispiel Angular / Angular-Cli-Problem 8534 , das durch PR 8535 behoben wird .
Das führt wie ein abhängiges Projekt frees-io/freestyle-opscenter-webclientzu seiner Aktualisierung package-lock.jsonPR 31: .


Die Regeneration von package-lock.json scheint das Problem nicht zu lösen
xianshenglu

@xianshenglu OK, ich werde die Antwort dort lassen, falls es anderen hilft.
VonC

Ich erhalte die Warnung für eine Paketsperre in einem alten Commit. Wie um alles in der Welt soll ich etwas in der Geschichte reparieren, ohne es neu zu schreiben?
Pishpish

@destoryer Das weiß ich nicht: versuche eine neue Frage mit mehr Details zu stellen (Betriebssystem, Version von npm, ...)
VonC

1
Das hat mein Problem behoben. Danke für den Tipp.
Rich


1

bekannte Sicherheitslücken und sollte aktualisiert werden.

Seit dem 23. Mai 2019 haben Sie jetzt " Dependabot: Automatisierte Sicherheitskorrekturen ".

Durch die Integration von Dependabot haben wir automatisierte Sicherheitskorrekturen als öffentliche Beta veröffentlicht.

Automatisierte Sicherheitskorrekturen sind von GitHub generierte Pull-Anforderungen zur Behebung von Sicherheitslücken.
Sie automatisieren einen langwierigen Teil des Workflows und machen es Entwicklern einfach, ihre Abhängigkeiten auf dem neuesten Stand zu halten.

Weitere Informationen finden Sie unter " Konfigurieren automatisierter Sicherheitskorrekturen ".

Hinweis: Automatische Sicherheitskorrekturen sind in der Beta verfügbar und können sich ändern.

Sie können automatische Sicherheitskorrekturen für jedes Repository aktivieren, das Sicherheitswarnungen und das Abhängigkeitsdiagramm verwendet.
Wir werden in den nächsten Monaten ab Mai 2019 automatisch automatische Sicherheitskorrekturen in jedem Repository aktivieren, das Sicherheitswarnungen und das Abhängigkeitsdiagramm verwendet.


Ich habe mit diesem Bot gemischte Ergebnisse erzielt. Ich mache lieber manuell npm auditund / oder npm audit fix.
Fuhrmanator

@ Führermanator OK. Sie haben in einem früheren Kommentar medium.com/coinmonks/… erwähnt ?
VonC

0

Das funktioniert bei mir. Deinstallieren Sie alle Ihre Abhängigkeiten und installieren Sie sie erneut

Zum Beispiel

In package.json finden Sie eine Liste Ihrer Abhängigkeiten

{
"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"
  }
}

Folgen Sie dazu dem Befehl

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. Navigieren Sie auf GitHub zur Hauptseite des Repositorys.
  2. Klicken Sie unter Ihrem Repository-Namen auf Sicherheit.
  3. Klicken Sie auf die Warnung, die Sie anzeigen möchten.
  4. Überprüfen Sie die Details der Sicherheitsanfälligkeit und, falls verfügbar, die Pull-Anforderung, die den automatisierten Sicherheitsupdate enthält.
  5. Wenn für die Warnung noch kein automatisierter Sicherheitskorrekturvorgang vorhanden ist, klicken Sie optional auf automatisierten Sicherheitskorrektur erstellen, um eine Pull-Anforderung zum Beheben der Sicherheitsanfälligkeit zu erstellen.
  6. Wenn Sie bereit sind, Ihre Abhängigkeit zu aktualisieren und die Sicherheitsanfälligkeit zu beheben, führen Sie die Pull-Anforderung zusammen.

Siehe Einzelheiten


0

Versuchen Sie npm audit fix, es wird viele Warnungen lösen

dann npm i [package.name]@xxx

zum Beispiel:

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

npm i lodash@4.17.13

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.