Wie behebe ich ein anfälliges npm-Paket in meiner package-lock.json, das nicht in der package.json aufgeführt ist?


92

Github sagt mir, dass eine Abhängigkeit in meiner Datei package-lock.json anfällig und veraltet ist. Das Problem ist, dass wenn ich dies tue npm installoder npm update, keiner von beiden die Abhängigkeit in der Datei package-lock.json aktualisiert.

Ich habe viel gegoogelt, die Datei gelöscht und fertig npm install.

Wenn jemand helfen kann, dieses Problem zu lösen, würde ich es sehr schätzen. Das fragliche Paket ist Hoek, das ich eigentlich nicht in meiner package.json-Datei habe.

Vielen Dank im Voraus.


2
Versuchen Sie, Ihre package-lock.json zu löschen und führen Sie die npm-Installation erneut aus
Rishikesh Dhokare

1
Sie können Ihre Abhängigkeiten überprüfen, um herauszufinden, welche von hoek abhängt, und diese aktualisieren. (Aber Sie könnten auch Pech haben und diese Abhängigkeit hat keine neuere Version.)
Roland Starke

Ich würde das gleiche von @RishikeshDhokare vorschlagen
xpto

Ich habe getan, wie @RishikeshDhokare sagte. Problem für mich gelöst
Melih Sahin

Antworten:


41

Es hört sich so an, als ob Hoek eine Abhängigkeit von einer Ihrer Abhängigkeiten ist (ein Paket, das Sie in Ihrem package.json haben, benötigt es also von seinem eigenen package.json).

Sie haben bereits erfolglos versucht, Ihre Projektabhängigkeiten zu löschen / neu zu installieren und zu aktualisieren. Daher scheint für die betreffende Paketabhängigkeit eine explizite oder maximale Version angegeben zu sein.

Ohne die Datei package.json für jede Ihrer Abhängigkeiten zu sehen, ist es schwierig, weitere Ratschläge zum Erzwingen eines Updates zu geben.

Bearbeiten: Um festzustellen, welche Pakete welche Abhängigkeiten verwenden, können Sie den NPM- lsBefehl verwenden: https://docs.npmjs.com/cli/ls

Um beispielsweise zu sehen, welche Pakete Hoek verwenden: npm ls hoek

Bearbeiten 2: Wie Ulysse BN richtig hervorhebt, können Sie NPM mit NPM Version 6 oder höher npm audit fixbitten, die Schwachstellen für Sie zu beheben.

Edit 3: Diejenigen, die dies lesen, sollten auch die Antwort von JBallin unten lesen. Es erweitert die Informationen, die ich hier gegeben habe, und ist (meiner Meinung nach) eine strukturiertere Antwort, die die Frage von OP besser anspricht. Wenn Sie jedoch eine schnelle Lösung wünschen, sollte diese Antwort ausreichen.


3
Ich habe ein ähnliches Problem mit einem anderen Paket (Growl). Ich vermute, es ist eine Version von etwas in meinem package.json, die von der spezifischen (anfälligen) Version von Growl abhängt. Ihre Antwort ist auf dem richtigen Weg und Sie könnten sie vielleicht treffen, wenn Sie den Befehl teilen könnten, der anzeigt, welche Pakete package.jsondarin von dem verwundbaren abhängen, in dem sie angezeigt werden package-lock.json.
Fuhrmanator

Siehe aktualisierte Antwort. Wenn Sie zusätzliche Hilfe benötigen, erstellen Sie eine neue Frage. :)
Alex Mulchinock


Sind Sie sicher, dass eine zusätzliche Frage gerechtfertigt war? Sie scheinen wie Duplikate.
JBallin

@JBallin Meine Antwort wurde seitdem mehrmals aktualisiert. Möglicherweise wurde es ursprünglich nicht als Duplikat qualifiziert.
Alex Mulchinock

24

TLDR: Aktualisieren Sie das übergeordnete Paket mit npm i $PARENT_PKG_NAME.


Hinweis

Wenn Sie Abhängigkeiten aktualisieren, sollten Sie das CHANGELOG auf wichtige Änderungen überprüfen.

Diagnose

npm auditzeigt sowohl das anfällige Paket an (beachten Sie, dass Sie hierfür eine package-lock.json-Datei benötigen, damit Sie es ausführen müssen npm i), als auch das Paket, von dem es abhängig ist (falls zutreffend). Beachten Sie, dass Sie auch die npm ls $CHILD_PKG_NAMEübergeordneten Abhängigkeiten anzeigen können.

Schnellkorrekturversuch

npm audit fixund npm audit fix --forcesind einen Versuch wert, aber manchmal muss die Korrektur manuell durchgeführt werden (siehe unten).

Manuelle Korrektur

Höchstwahrscheinlich hat das übergeordnete Paket bereits seine Abhängigkeiten behoben (Sie können dies überprüfen, indem Sie zu ihrem GitHub gehen und die letzten Commits überprüfen - oder nur sehen, ob dies das Problem behebt), sodass Sie es einfach ausführen npm i $PARENT_PKG_NAME @$NEW_VERSIONund Ihre Paketsperre aktualisieren können .json.

Wenn der Elternteil die Sicherheitsanfälligkeit nicht behoben hat

Wenn der Betreuer nicht zu reagieren scheint, können Sie ein alternatives Paket verwenden, das dasselbe erreicht, oder das Paket verzweigen und die Sicherheitsanfälligkeit selbst aktualisieren.

Überprüfen Sie Fix

Sie können jetzt überprüfen, ob es funktioniert hat, indem Sie ausführen npm auditund sicherstellen, dass keine Schwachstellen angezeigt werden. Übernehmen Sie Ihre Änderungen, senden Sie sie an GitHub, aktualisieren Sie Ihre Benachrichtigungen / Warnungen und sie sollten verschwunden sein!


Wie wäre es, wenn in meinem Fall die Schnellkorrektur weder funktioniert noch das Handbuch in dieser Antwort, da das übergeordnete Framework ein Framework ist, das im Update die API vollständig geändert hat und diese Bibliothek sogar entfernt? Dies liegt daran, dass die Eltern weiterhin die alte Bibliothek verwenden. In der Tat ist das alte noch gepflegt, aber nicht aktualisiert, ich meine, wie ich vorgehen könnte?
Carmine Tambascia

1
@CarmineTambascia, wenn das von Ihnen verwendete Paket seine Schwachstellen nicht behebt (ich würde ein Problem / eine PR öffnen, in der Hoffnung, dass es behoben wird) - Ich würde in Betracht ziehen, eine eigene Abzweigung der Pakete zu erstellen, die Vulns zu beheben Ort der betroffenen Packung.
JBallin

Gibt es eine Möglichkeit, das untergeordnete Paket zu aktualisieren? Falls das übergeordnete Paket nicht auf Sicherheitslücken korrigiert wurde?
Harshita

@ Harshita siehe Abschnitt "Wenn Eltern die Sicherheitsanfälligkeit nicht behoben haben"
JBallin

1
@ Harshita hast du sie erreicht? Es liegt in ihrem Interesse, auch diese Schwachstellen zu beheben.
JBallin

6

Wenn Sie npm @ 6 oder höher haben, können Sie diese npm audit fixfür Ihre Sicherheitsprobleme verwenden.


1
Es gibt unzählige verschiedene Tools und sie haben nicht die gleichen Schwachstellendatenbanken. Am umfassendsten fand ich Snytch.
Ulysse BN

2

Verwenden:

npm ich hoek

npm installiert die neueste Version von hoek und Ihre package.lock.json wird aktualisiert.


0

Ich hatte dieses Problem und stellte fest, dass der Server, auf dem ich npm ausführte, eine alte Version von npm auf it-package-lock hatte. Json wird nur von neueren Versionen unterstützt.


0

Haben Sie dies versucht: Gehen Sie zu Ihrem Projektstamm, löschen Sie die package-lock.jsonDatei node_modulesund die .cacheOrdner und dann npm install.


0

Verwenden Sie zum Überprüfen anfälliger npm-Pakete einfach die folgenden Befehle:

npm audit

Um anfällige npm-Pakete zu reparieren, verwenden Sie einfach die folgenden Befehle, um auch package-lock.json zu reparieren:

npm audit fix

0

Bearbeiten Sie package-lock.jsonmanuell und aktualisieren Sie die anfällige Paketversion auf die feste und verwenden Sie sie dann

npm ci

Dadurch werden die Pakete entsprechend installiert, package-lock.jsonindem package.jsonzuerst ignoriert wird . Dann benutze

npm audit fix

wieder, um sicher zu sein, ob es richtig gemacht wird. Wenn dies nicht hilft, verwenden Sie andere vorgegebene Lösungen.

Weitere Informationen hier:

https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable

oder hier: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities


Eine zusätzliche Lösung könnte sein: npmjs.com/package/npm-check-updates
Lonely

-4

Führen Sie nach der Installation neuer Abhängigkeiten den folgenden Befehl aus, um die Datei package-lock.json zu aktualisieren:

npm update package-lock.json
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.