Как ограничить установки NPM

При обсуждении недавней атаки вредоносного ПО с использованием популярный пакет NPM (и после удаления этого пакета из нашей кодовой базы), я начал исследовать способы ограничения npm install команд. До сих пор я не нашел способа ограничить то, что может установить разработчик.

Есть две причины, по которым это будет выгодно всем:

  1. Получите дополнительный уровень защиты от установки вредоносных пакетов.
  2. Избегайте непреднамеренной установки пакетов, когда имя пакета было опечатано.

Что касается № 1, идея состоит в том, что каждая команда может создать одобренный список имен пакетов, которые можно сверить с перед npm install фактическим запуском — по сути, создавая некий процесс проверки для пакетов npm.

Что касается № 2, на нашу команду действительно повлияло удаление этого пакета из NPM, но единственная причина, по которой у нас когда-либо была эта зависимость, заключается в том, что пакет был установлен случайно и какое-то время оставался незамеченным. Вот что, я думаю, произошло:

  1. Разработчик хотел установить пакет и намеревался ввести npm install --save somepackagehere (обратите внимание на тире тире)
  2. Разработчик случайно ввел npm install save (без тире тире), установив сохранение пакет npm, который зависит от event-stream, который зависит от flatmap-stream.

Версия узла: 9.9.1

Версия NPM: 6.4.1


ВОПРОС

Существует ли существующий способ достичь того, что я описал выше, который не зависит от проверки кода вручную?


person Gregg Bursey    schedule 28.11.2018    source источник
comment
утвержденный список имен пакетов, которые могут быть проверены до фактического запуска npm install - ловушка предварительной установки. Кураторский список пакетов NPM? Кажется, это перебор. Просто просмотрите изменения package.json и обратите внимание на npm audit.   -  person Estus Flask    schedule 28.11.2018
comment
вместо npm install --save вы можете вручную отредактировать файл package.json с нужными библиотеками. Также никогда не используйте морковку вверх ^, потому что она автоматически обновляет все пакеты до следующей минорной версии. Помимо этого, нужно внимательно следить за тем, что вы устанавливаете. Но, как и вредоносное ПО, о котором вы упомянули, оно пролежало в пакете 2-3 месяца и было обнаружено случайно. Таким образом, никакие исследования, которые вы провели, не защитили бы вас от обновления до этой версии, если бы вы не были ленивы и не обновляли свои пакеты часто.   -  person rhavelka    schedule 28.11.2018
comment
@estus никогда не слышал о крючке - спасибо, что указали на это.   -  person Gregg Bursey    schedule 28.11.2018
comment
никогда не использовать морковь — это плохое решение, так как вы теряете улучшения (и потенциальные исправления безопасности), которые появляются позже. Однако он предоставляет вам «обновления», которые ломают или ломают ваши вещи, но вы можете отслеживать это с помощью npm audit   -  person Mathieu K.    schedule 29.11.2018
comment
И просто чтобы указать на очевидное, если ваше приложение не ОЧЕНЬ простое, нереалистично думать, что вы сможете самостоятельно отслеживать все свои зависимости o.O, вам нужно доверять и полагаться на сообщество. Или создайте свой собственный язык в своем гараже и придумайте понг через несколько лет ^_^   -  person Mathieu K.    schedule 29.11.2018


Ответы (1)


Как было предложено в комментариях, просто проверка кода при проверке package.json изменений послужила цели «ограничения» установки пакетов NPM.

person Gregg Bursey    schedule 14.08.2019