Jak naprawić wrażliwy pakiet npm w pliku package-lock.json, którego nie ma na liście package.json?

91

Github informuje mnie, że zależność w moim pliku package-lock.json jest podatna na atak i nieaktualna. Problem polega na tym, że jeśli robię npm installlub npm updateżadna z nich zaktualizować zależność w pliku pakiet-lock.json.

Dużo googlowałem, a także usunąłem plik i gotowe npm install.

Jeśli ktoś może pomóc rozwiązać ten problem, byłbym bardzo wdzięczny. Ten pakiet to Hoek, którego w rzeczywistości nie mam w pliku package.json.

Z góry bardzo dziękuję.

Raph117
źródło
2
spróbuj usunąć pakiet-lock.json i ponownie uruchom instalację npm
Rishikesh Dhokare
1
Możesz sprawdzić swoje zależności, aby dowiedzieć się, który z nich zależy od hoeka i zaktualizować ten. (Ale możesz też nie mieć szczęścia i ta zależność nie ma nowszej wersji.)
Roland Starke
Sugerowałbym to samo z @RishikeshDhokare
xpto
Zrobiłem tak, jak powiedział @RishikeshDhokare. Problem rozwiązany dla siebie
melih sahin

Odpowiedzi:

41

Wygląda na to, że Hoek jest zależnością jednej z twoich zależności (więc pakiet, który masz w swoim package.json, wymaga tego z własnego pliku package.json).

Próbowałeś już usunąć / ponownie zainstalować i zaktualizować zależności projektu bez powodzenia, więc wydaje się, że dana zależność pakietu ma określoną jawną lub maksymalną wersję.

Bez zobaczenia pliku package.json dla każdej z zależności, byłoby trudno doradzić dalsze, jak wymusić aktualizację.

Edycja: aby pomóc Ci zidentyfikować, które pakiety używają jakich zależności, możesz użyć lspolecenia NPM : https://docs.npmjs.com/cli/ls

Na przykład, aby zobaczyć, które pakiety używają Hoek: npm ls hoek

Edycja 2: Jak poprawnie wskazuje Ulysse BN, jeśli masz NPM w wersji 6 lub nowszej, możesz npm audit fixpoprosić NPM o próbę naprawy luk za Ciebie.

Edycja 3: Ci, którzy to czytają, powinni również sprawdzić odpowiedź JBallina poniżej. Rozszerza informacje, które tu podałem i jest (moim zdaniem) bardziej uporządkowaną odpowiedzią, która lepiej odpowiada na pytanie OP. Jednak - jeśli chcesz szybkiego rozwiązania - ta odpowiedź powinna wystarczyć.

Alex Mulchinock
źródło
3
Mam podobny problem z innym pakietem (Growl). Domyślam się, że to jakaś wersja czegoś w moim, package.jsonco zależy od konkretnej (podatnej na ataki) wersji Growl. Twoja odpowiedź jest na dobrej drodze i być może mógłbyś ją znaleźć, gdybyś udostępnił polecenie, które pokaże, który pakiet (y) package.jsonzależy od tego, który zawiera luki package-lock.json.
Fuhrmanator
Zobacz zaktualizowaną odpowiedź. Jeśli potrzebujesz dodatkowej pomocy - utwórz nowe pytanie. :)
Alex Mulchinock
Dzięki. Gotowe: stackoverflow.com/questions/50764225/ ...
Fuhrmanator,
Czy na pewno dodatkowe pytanie było uzasadnione? Wyglądają jak duplikaty.
JBallin
@JBallin moja odpowiedź została kilkakrotnie zaktualizowana. Być może pierwotnie nie kwalifikował się jako duplikat.
Alex Mulchinock
24

TLDR: Zaktualizuj pakiet nadrzędny przy użyciu npm i $PARENT_PKG_NAME.


Uwaga

Podczas aktualizowania zależności należy przejrzeć dziennik zmian pod kątem wszelkich istotnych zmian.

Diagnoza

npm auditujawni zarówno podatny pakiet (pamiętaj, że będziesz potrzebować do tego pliku package-lock.json, więc będziesz musiał uruchomić npm i), jak i pakiet, od którego jest zależny (jeśli dotyczy). Zauważ, że możesz również użyć, npm ls $CHILD_PKG_NAMEaby zobaczyć jego zależności nadrzędne.

Próba szybkiej naprawy

npm audit fixi npm audit fix --forcewarto spróbować, ale czasami naprawa będzie musiała zostać wykonana ręcznie (patrz poniżej).

Naprawa ręczna

Najprawdopodobniej pakiet nadrzędny już naprawił swoje zależności (możesz to sprawdzić, przechodząc do ich GitHub i przeglądając ostatnie zatwierdzenia - lub po prostu sprawdzając, czy to naprawia), więc możesz po prostu uruchomić npm i $PARENT_PKG_NAME @$NEW_VERSIONi zaktualizować blokadę pakietu .json.

Jeśli rodzic nie naprawił usterki

Jeśli opiekun wydaje się nie reagować, możesz rozważyć użycie alternatywnego pakietu, który osiąga to samo lub rozwidlenie pakietu i samodzielną aktualizację luki.

Zweryfikuj poprawkę

Możesz teraz sprawdzić, czy zadziałało, uruchamiając npm auditi upewniając się, że nie pojawiają się żadne luki. Zatwierdź zmiany, prześlij je do GitHub, odśwież powiadomienia / alerty i powinny zniknąć!

JBallin
źródło
A co z tym, że w moim przypadku Quick Fix nie działa, ani podręcznik w tej odpowiedzi, ponieważ rodzic to framework, który w aktualizacji zmienił całkowicie API i pozbył się nawet tej biblioteki? Dzieje się tak, ponieważ nadrzędna praca nadrzędna nadal korzysta ze starej biblioteki. Rzeczywiście, stary jest nadal utrzymywany, ale nie jest aktualizowany, mam na myśli, jak mogłem kontynuować?
Carmine Tambascia
1
@CarmineTambascia, jeśli pakiet, którego używasz, nie naprawia swoich luk w zabezpieczeniach (otworzyłbym problem / PR w nadziei, że zostanie naprawiony) - rozważyłbym zrobienie własnej rozwidlenia pakietu (ów), naprawiłbym wulny, w miejsce przesyłki, której dotyczy problem.
JBallin
czy istnieje sposób na zaktualizowanie pakietu podrzędnego? W przypadku, gdy pakiet nadrzędny nie został poprawiony pod kątem luk w zabezpieczeniach?
Harshita
@Harshita zobacz sekcję zatytułowaną „Jeśli rodzic nie naprawił luki”
JBallin
1
@Harshita czy skontaktowałeś się z nimi? W ich interesie leży również naprawienie tych luk.
JBallin
6

Jeśli masz npm @ 6 lub nowszy, możesz użyć go npm audit fixze względów bezpieczeństwa.

Ulysse BN
źródło
Istnieje mnóstwo różnych narzędzi i nie mają one takich samych baz danych luk. Najbardziej wyczerpująca okazała się Snytch.
Ulysse BN
2

Posługiwać się:

npm i hoek

npm zainstaluje najnowszą wersję hoek, a plik package.lock.json zostanie zaktualizowany.

Skorpion
źródło
0

Miałem ten problem i stwierdziłem, że to dlatego, że serwer, na którym uruchomiłem npm, miał na nim starą wersję npm - package-lock.json jest obsługiwany tylko przez nowsze wersje.

jvvw
źródło
0

czy próbowałeś tego: przejdź do katalogu głównego projektu, usuń plik package-lock.json plik node_modulesi .cachefoldery, a następnie npm install.

Cake L.
źródło
0

Aby sprawdzić wrażliwe pakiety npm, użyj następujących poleceń:

npm audit

Aby naprawić wrażliwe pakiety npm, po prostu użyj następujących poleceń, które naprawią również pakiet-lock.json:

npm audit fix
Jerry Chong
źródło
0

Edytuj package-lock.jsonręcznie i zaktualizuj podatną wersję pakietu do poprawionej, a następnie użyj

npm ci

Spowoduje to zainstalowanie pakietów zgodnie z najpierw package-lock.jsonignorowaniem package.json. Następnie użyj

npm audit fix

ponownie, aby mieć pewność, że zostało to prawidłowo wykonane. Jeśli to nie pomoże, zastosuj inne podane rozwiązania.

Więcej informacji tutaj:

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

lub tutaj: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities

Samotny
źródło
Dodatkowym rozwiązaniem mogłoby być: npmjs.com/package/npm-check-updates
Lonely
-3

Po zainstalowaniu nowych zależności uruchom następujące polecenie, aby zaktualizować plik package-lock.json:

npm update package-lock.json
SA911
źródło