Як виправити вразливий пакет npm у своєму пакеті-lock.json, якого немає в пакеті.json?


91

Github повідомляє мені, що залежність у моєму файлі package-lock.json є вразливою та застарілою. Проблема полягає в тому, що якщо я це зроблю npm installабо npm updateжоден з них не оновить залежність у файлі package-lock.json.

Я багато займався цим, а також видалив файл і закінчив npm install.

Якщо хтось може допомогти вирішити цю проблему, я би це вдячний. Йдеться про пакет Hoek, якого я фактично не маю у своєму файлі package.json.

Заздалегідь велике спасибі.


2
спробуйте видалити package-lock.json і запустіть npm install ще раз
Рішікеш Докаре

1
Ви можете перевірити свої залежності, щоб з’ясувати, яка з них залежить від hoek, та оновити її. (Але вам також може не пощастити, і ця залежність не має нової версії.)
Роланд Старк,

Я б запропонував те саме @RishikeshDhokare
xpto

Я зробив, як сказав @RishikeshDhokare. Проблему вирішив сам
melih sahin

Відповіді:


41

Здається, Hoek - це залежність однієї з ваших залежностей (отже, пакет, який ви маєте у своєму package.json, вимагає його з власного package.json).

Ви вже спробували видалити / перевстановити та оновити залежності вашого проекту без успіху, тому, схоже, що у залежності пакета, про яку йде мова, вказана явна або максимальна версія.

Не бачачи package.json для кожної з ваших залежностей, важко було б далі порадити, як примусити оновлення.

Редагувати: Щоб допомогти вам визначити, які пакети використовують які залежності, ви можете скористатися lsкомандою NPM : https://docs.npmjs.com/cli/ls

Наприклад, щоб побачити, в яких пакетах використовується Hoek: npm ls hoek

Редагування 2: Як правильно зазначає Ulysse BN, якщо у вас NPM версії 6 або пізнішої, ви можете npm audit fixпопросити NPM спробувати виправити уразливості для вас.

Редагування 3: Тим, хто читає це, слід також ознайомитися з відповіддю Дж.Балліна нижче. Він розширює інформацію, яку я дав тут, і є (на мій погляд) більш структурованою відповіддю, яка краще вирішує питання ОП. Однак - якщо ви хочете швидкого виправлення - цієї відповіді має бути достатньо.


3
У мене схожа проблема з іншим пакетом (Growl). Я припускаю, що це якась версія чогось у моєму, package.jsonщо залежить від конкретної (вразливої) версії Growl. Ваш відповідь на правильному шляху , і ви могли б , можливо , прибити, якщо ви могли б поділитися командою , яка покаже , який пакет (и) в package.jsonтому , що в залежності від уразливих один показу в package-lock.json.
Fuhrmanator

Дивіться оновлену відповідь. Якщо вам потрібна додаткова допомога - створіть нове запитання. :)
Алекс Мульчинок


Ви впевнені, що було виправдано додаткове запитання? Вони здаються дублікатами.
JBallin

@JBallin моя відповідь була оновлена ​​кілька разів з тих пір. Можливо, він спочатку не кваліфікувався як копія.
Alex Mulchinock,

24

TLDR: оновіть батьківський пакет за допомогою npm i $PARENT_PKG_NAME.


Примітка

Під час оновлення залежностей вам слід переглянути CHANGELOG на наявність будь-яких змін, що порушують.

Діагностика

npm auditрозкриє як вразливий пакет (зауважте, що для цього вам знадобиться файл package-lock.json, тому вам потрібно буде запустити npm i), так і пакет, від якого він залежить (якщо це можливо). Зверніть увагу, що ви також можете використовувати його npm ls $CHILD_PKG_NAMEдля перегляду батьківських залежностей.

Спроба швидкого виправлення

npm audit fixі npm audit fix --forceварто спробувати, але іноді виправлення потрібно робити вручну (див. нижче).

Виправлення вручну

Швидше за все, батьківський пакет вже виправив свої залежності (ви можете перевірити це, перейшовши до їхнього GitHub і переглянувши нещодавні коміти - або просто подивившись, чи це виправляє), так що ви можете просто запустити, npm i $PARENT_PKG_NAME @$NEW_VERSIONі він оновить вашу блокування пакета .json.

Якщо батько не виправив уразливість

Якщо супровідник, здається, не реагує, ви можете розглянути можливість використання альтернативного пакету, який виконує те саме, або розгалуження пакету та оновлення вразливості самостійно.

Перевірте виправлення

Тепер ви можете переконатися, що він працював, запустивши npm auditта переконавшись, що вразливості не відображаються. Фіксуйте свої зміни, надсилайте їх на GitHub, оновлюйте свої сповіщення / сповіщення, і вони повинні зникнути!


А як щодо мого випадку, швидке виправлення не працює, ані керівництво в цій відповіді, оскільки батько - це фреймворк, який в оновленні повністю змінив API і навіть позбувся цієї бібліотеки? Це тому, що батьківська організація все ще використовує стару бібліотеку. Дійсно, старе все ще підтримується, але не оновляється, я маю на увазі, як я міг би продовжувати?
Carmine Tambascia

1
@CarmineTambascia, якщо пакет, яким ви користуєтесь, не виправляє свої вразливості (я б відкрив випуск / PR, сподіваючись, що це виправлять) - я б подумав про створення власної вилки пакета (пакетів), виправлення вульн, в місце постраждалого пакета.
JBallin

чи є спосіб оновити дочірній пакет? У випадку, коли батьківський пакет не був виправлений на наявність уразливостей?
Харшіта

@Harshita див. Розділ "Якщо батьки не виправили уразливість"
JBallin

1
@Harhita, ти звертався до них? У їхніх інтересах також виправити ці вразливості.
JBallin

6

Якщо у вас npm @ 6 або пізнішої версії, ви можете використовувати npm audit fixдля своїх проблем безпеки.


Існує маса різних інструментів, і вони не мають однакових баз даних вразливості. Той, кого я знайшов найбільш вичерпним, - це Snytch.
Ulysse BN

2

Використання:

нпм

npm встановить останню версію hoek, і ваш package.lock.json оновиться.


0

У мене виникла ця проблема, і я виявив, що це тому, що сервер, на якому я запускав npm, мав на ньому стару версію npm - package-lock.json підтримується лише новими версіями.


0

ви пробували це: перейдіть до кореня проекту, видаліть package-lock.jsonфайл node_modulesі .cacheпапки, а потім npm install.


0

Щоб перевірити вразливі пакети npm, просто використовуйте такі команди:

npm audit

Щоб виправити вразливі пакунки npm, просто скористайтеся наступними командами, які також виправлять пакет-lock.json:

npm audit fix

0

Редагуйте package-lock.jsonвручну та оновіть вразливу версію пакета до виправленої, а потім використовуйте

npm ci

Це встановить пакети відповідно до package-lock.json, ігноруючи package.jsonспочатку. Потім використовуйте

npm audit fix

ще раз, щоб бути впевненим, чи правильно це зроблено. Якщо це не допомагає, використовуйте інші подані рішення.

Більше інформації тут:

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

або тут: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities


Додатковим рішенням може бути: npmjs.com/package/npm-check-updates
Lonely

-3

Після встановлення нових залежностей запустіть таку команду, щоб оновити файл package-lock.json:

npm update package-lock.json
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.