Выбор ответа Senior Безопасность цепочки поставки обновлено

Dependency confusion

Вопрос

Внутренний npm-пакет называется billing-utils (без scope), сборка ищет пакеты и во внутреннем, и в публичном реестре. Чем это опасно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В публичный реестр выложат billing-utils с большей версией, и сборка возьмёт его. Это и есть dependency confusion: менеджер пакетов выбирает наибольшую версию среди источников.

Варианты ответа

  1. Внутренний пакет без scope опубликуется в публичный реестр и станет виден всем
  2. В публичный реестр выложат billing-utils с большей версией, и сборка возьмёт егоправильный ответ
  3. npm откажется ставить пакет без scope из внутреннего реестра
  4. Сборка станет медленнее из-за двойного поиска в реестрах

Разбор

Это и есть dependency confusion: менеджер пакетов выбирает наибольшую версию среди источников. Защита: scoped-имена (@acme/billing-utils) с привязкой scope к внутреннему реестру, единый прокси-реестр с правилами, зарезервированные имена в публичном реестре. Сам внутренний пакет при этом наружу не утекает, npm пакеты без scope ставит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.