Як виправити вразливості npm вручну?


96

Коли я запускаю, npm installце говорить found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details.

Однак npm audit fixрезультатиup to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

Чи reviewозначає це, що він не повинен бути виправлений користувачем?

Коли я запускаю, npm auditце дає мені список таблиць, подібний до цього:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

У цьому прикладі в розділі відновлення посилання на сторінку сказано Update to version 4.17.5 or later.. Однак /node_modules/browser-sync/package.jsonтам є рядки:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

і більше ніяких залежностей lodash. Тож це вже має бути v4.17.5. Я також перевірив, /node_modules/lodash/lodash.jsonякий має var VERSION = '4.17.10';рядок. У них /node_modules/lodash/package.jsonє такі рядки:

  "_from": "lodash@^4.17.4",
  "_id": "lodash@4.17.10",

Я вважаю, що версія відображається в "_id", а не в "_from", тому версії правильні, але вразливість все ще з'являється в списку аудиту.

Я все ще новачок у node.js, і ці повідомлення мене дуже бентежать. Чи є спосіб виправити це вручну або позбутися цих повідомлень, з якими я нічого не можу зробити?


Відповіді:


33

lodash-cliin devDependenciesне впливає на те, як browser-syncпрацює ваш проект, devDependenciesігнорується, коли пакет встановлюється як залежність.

Що auditговориться в доповіді, що це , easy-extenderщо має lodashзалежність:

browser-sync > easy-extender > lodash        

Це залежить від Lodash 3 , тоді як проблема була виправлена ​​в Lodash 4. Проблему можна було виправити шляхом форкінгу easy-extender, оновлення та встановлення замість пакета з публічного реєстру NPM. Але реальної проблеми з цією залежністю немає.

auditВажливість звіту слід оцінювати вручну. Навіть якщо вкладена залежність має ризик безпеки, це не означає, що була використана функція, яка вводить цей ризик. Це також не означає, що навіть якщо воно використовується, воно створює реальний ризик через його використання.

browser-syncє інструментом розробки, який не використовується у виробництві, існує не так багато сценаріїв, де його вразливості можуть бути використані. І прототип забруднення - це зовсім не вразливість, лише повідомлення, що пакет не відповідає передовій практиці, його можна ігнорувати.

Як правило, це спосіб виправлення повідомлених вразливостей:

  • Зробіть перевірку осудності
  • Якщо це справжня проблема, перевірте сховище вразливого пакету на наявність проблем та PR
  • Якщо цього не сталося, надішліть проблему
  • Розкрийте сховище або використовуйте існуючий PR як залежність git, доки це не буде виправлено у випуску NPM
  • У разі вкладених залежностей, робіть це на декількох рівнях вкладеності

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

patch-packageможе допомогти виправити вкладені залежності на місці, але це не вплине на auditзвіт.


Я не звертав уваги на розділ "Шлях", і він справді використовує lodash v3.10.1, дякую. Але браузер-синхронізація - це лише приклад, останній із списку. Отже, я можу проігнорувати 2 низькі вразливості, але чи можу я проігнорувати 31 помірну? Я вважаю, що я не повинен нічого модифікувати node_modules, тож форкінг і фіксація - це єдиний спосіб позбутися від них? І як новий користувач я не маю можливості це робити? Чи слід видавати розробникам пакунків про них?
Якупов,

4
але чи можу я ігнорувати 31 поміркованого? - це те, що стосується "перевірки осудності", використовуйте своє судження. Чим більше уваги ви приділяєте тому, що насправді сказано в цих звітах, тим кращим розробником ви можете стати, з точки зору безпеки. Чи слід видавати розробникам пакунків про них? - ви, мабуть, повинні (принаймні замовкнути audit), відповідь відповідає на це. Люди жили npm auditякось без . Шанси на те, що вони спричиняють реальні проблеми з безпекою програми, дуже низькі, але, не знаючи, що це таке і як вони використовуються у вашому додатку, я не можу цього гарантувати.
Estus Flask,

Дякую! Потрібен час, щоб написати коментар, тому не побачив відредаговану частину перед коментуванням.
Якупов

5

Якщо ви абсолютно впевнені, що хочете пропустити перевірку, ви можете зробити це, додавши --no-audit

 npm install --no-audit

2

'виправлення аудиту npm' збільшить версію залежності в package.json, що може призвести до злому коду. Тож кращий спосіб - відкрити package-lock.json та оновити версії залежностей / залежностей до потрібної версії. Зберігайте package-lock.json у сховищі.

Іноді вразливості надходять із пакетів розробників. У такому випадку ігноруйте ці вразливості, оскільки вони не піднімаються у виробництві.


-3

Найбільша проблема, яка сталася в моїй системі, була пов’язана з пакетом npm. Я намагався,

npm un npm

Не потрібно встановлювати знову.

Просто запустіть програму ще раз. У мене це спрацювало.

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