Правильный способ исправить потенциальную уязвимость безопасности в зависимости, определенной в package-lock.json

88

Github выдал мне эту ошибку в одном из моих репозиториев.

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.

Зависимость не определена в нашем package.jsonфайле. Насколько я понимаю, удалять package-lock.jsonфайл и восстанавливать его - не лучшая практика . Однако я не вижу другого способа решить эту проблему. Если я отклоню эту уязвимость в системе безопасности, она появится снова через пару дней. Любые идеи? Благодарность!

Kaito
источник

Ответы:

67

Новое: теперь с npm @ 6 вы можете напрямую запускать

npm audit fix

Старый ответ:

Вы должны попытаться определить имя проблемного пакета, а затем запустить

npm install package-name

замена имени пакета, очевидно.

При этом будет установлена ​​последняя версия пакета, и очень часто последняя версия устраняет проблему безопасности. Если у вас есть ограничение на версию (например, 1.2), вы всегда можете попробовать:

npm install package-name@^1.2

и будет установлена ​​последняя исправленная версия

DevTheJo
источник
1
... и чтобы «определить имя проблемного пакета» вы можете запустить npm ls vulnerability-name. Здесь перечислены зависимые от уязвимости, которые вы затем можете обновить / установить. (как довольно неясно упомянуто в ответе
@RileyManda
1
npm audit fix полностью устраняет эту проблему для меня.
Kaito
9
Это добавит package-nameв dependenciesиз package.json. Я не хочу этого.
slideshowp2
7

Чтобы решить эту проблему:

Решение 1. Сначала найдите уязвимость: используйте свой терминал: cd в свой проект , затем запустите «npm ls hoek»

И наконец: npm install bcrypt @ latest

Затем отправьте обновленный проект в git (т.е. выполните новую фиксацию).

Решение 2:

если первый вариант / решение не решает проблему, измените версию вручную в файле package-lock.json. Измените версию вручную с 2.16.3 на 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

Затем обновите свой проект на GitHub (фиксация / нажатие). Просто убедитесь, что каждая версия hoek-версии в вашей версии package-lock.json изменена на 4.2.1.

В качестве альтернативы, если вы можете найти способ изменить версию hoek / обновить hoek с помощью npm, это значительно упростит работу. ( Что- то вроде: npm update @ hoek..version ) .. или удалите конкретную зависимость, затем переустановите ее с помощью bower или npm.

РайлиМанда
источник
4

У меня была такая же проблема с уязвимостью безопасности lodash в проекте, который я создавал с помощью пряжи. Github пометил это как проблемы безопасности.

Я попробовал ответ от @rileymanda выше, используя терминал: cd в проект, затем запустите npm ls lodash.

Это обнаружило, что в моем случае ошибка была в сценариях реакции . Быстрый поиск в Google проблем с реактивными скриптами и lodash обнаружил, что это известная проблема.

Я пробовал разные вещи, чтобы исправить с помощью пряжи - все безуспешно. npm ls lodashвсе еще показывает уязвимую версию lodash в использовании.

Прочитав блог Мэтта Тернбулла об улучшениях в npm, я переключился с yarn обратно на npm. (Удалить yarn.lock, удалить ./node_modules. Выполнить npm install). npm ls lodashтеперь показаны последние используемые версии зависимостей - ура! Привязан к github, и теперь он был счастлив, что уязвимость исчезла.

Похоже, что пряжа пытается решить такие проблемы (или не предназначена для этого).

Если у вас возникла эта проблема при сборке с помощью пряжи, попробуйте переключиться [назад] на npm!

JohnSk
источник
3

Насколько я понимаю, не рекомендуется удалять файл package-lock.json и восстанавливать его.

Тем не менее, именно это обычно и делается в этом случае.
См., Например, проблему angular / angular-cli 8534 , которая решается с помощью PR 8535 .
Это приводит зависимый проект , как frees-io/freestyle-opscenter-webclientдля обновления его package-lock.json: PR 31 .

VonC
источник
Восстановление пакета-lock.json кажется не решает probelm
xianshenglu
@xianshenglu Хорошо, я оставлю здесь ответ на случай, если он поможет другим.
VonC
Я получаю предупреждение о блокировке пакета в старом коммите. Как я могу исправить что-то в истории, не переписывая ее?
pishpish
@destoryer Я не знаю: попробуйте задать новый вопрос с более подробной информацией (ОС, версия npm, ...)
VonC
1
Это устранило мою проблему. Спасибо за чаевые.
Rich
3

Самый простой способ исправить это:

  1. npm install <dep>
  2. npm uninstall <dep>
  3. npm update
  4. npm install

От: https://github.com/Microsoft/vscode/issues/48783#issuecomment-384873041

Adrianmc
источник
1
Мой находится только в зависимостях (package-lock.json), поэтому выполнения шагов 1 и 2 достаточно, чтобы исправить мою проблему. Ура!
PhoenixPan
1

известные уязвимости безопасности и должны быть обновлены.

С 23 мая 2019 года у вас теперь есть « Dependabot: автоматические исправления безопасности ».

Благодаря интеграции Dependabot мы выпустили автоматические исправления безопасности в виде общедоступной бета-версии.

Автоматические исправления безопасности - это запросы на вытягивание, генерируемые GitHub для исправления уязвимостей безопасности.
Они автоматизируют утомительную часть рабочего процесса и упрощают разработчикам обновление своих зависимостей.

Подробнее см. « Настройка автоматических исправлений безопасности ».

Примечание. Автоматические исправления безопасности доступны в бета-версии и могут быть изменены.

Вы можете включить автоматические исправления безопасности для любого репозитория, который использует предупреждения безопасности и граф зависимостей.
Мы автоматически включим автоматические исправления безопасности в каждом репозитории, который использует предупреждения безопасности и график зависимостей, в течение следующих нескольких месяцев, начиная с мая 2019 года.

VonC
источник
У меня были смешанные результаты с этим ботом. Я предпочитаю вручную делать npm auditи / или npm audit fix.
Fuhrmanator
@Fuhrmanator ОК. Вы упомянули medium.com/coinmonks/… в предыдущем комментарии?
VonC
0

У меня это работает. удалите все свои зависимости и снова установите

Например

из package.json см. список ваших зависимостей

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

Следуйте команде для этого

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. На GitHub перейдите на главную страницу репозитория.
  2. Под именем вашего репозитория нажмите Безопасность.
  3. Щелкните предупреждение, которое хотите просмотреть.
  4. Просмотрите подробную информацию об уязвимости и, если возможно, запрос на извлечение, содержащий автоматическое исправление безопасности.
  5. При желании, если еще нет автоматического исправления безопасности для предупреждения, чтобы создать запрос на вытягивание для устранения уязвимости, щелкните Создать автоматическое исправление безопасности.
  6. Когда вы будете готовы обновить свою зависимость и устранить уязвимость, объедините запрос на перенос.

Смотрите подробности

МД ШАЙОН
источник
0

попробуйте npm audit fix, это решит многие предупреждения

тогда npm i [package.name]@xxx

например:

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

npm i lodash@4.17.13

Джун Ду
источник