Skip to content
PПромтбук
RUEN
04Безопасность

Безопасность dependency / supply chain

Аудит npm/pypi/cargo, lockfiles, известные CVE, защита от malicious packages.

Защити проект от supply chain атак.

Виды атак

  • Typo-squatting (reqests вместо requests)
  • Compromised maintainer accounts
  • Malicious updates в популярных пакетах
  • Dependency confusion (private vs public)
  • Прямые vulnerabilities в коде

Layered defence

1. Lock files обязательны

package-lock.json / yarn.lock / pnpm-lock.yaml
poetry.lock / Pipfile.lock
Cargo.lock
  • В git ОБЯЗАТЕЛЬНО
  • Не игнорируй "лишние пакеты"
  • npm/pnpm ci использует lock (детерминистично)

2. Audit регулярно

npm audit          # известные CVE
npm audit fix      # автофикс minor

pip-audit          # Python
cargo audit        # Rust

Запускай:

  • В CI на каждом PR
  • Cron еженедельно на main branch
  • Перед deploy в прод

3. Dependabot / Renovate

Автомат обновления:

  • Security-only обновления automатом
  • Minor / patch — еженедельно
  • Major — ручная проверка
# .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"

4. Pin versions

В package.json:

"react": "19.0.0"       ← exact
"react": "^19.0.0"      ← compatible (minor/patch может обновиться)
"react": "~19.0.0"      ← only patch
"react": "*"            ← anything (опасно!)

Принципы:

  • Production deps: ^ (auto patch fixes)
  • Critical security libs (auth, crypto): exact pin + manual review
  • Никогда * или latest

5. Review новые dependencies

Перед добавлением:

  • Сколько maintainers? (1 → высокий риск)
  • Когда последний commit?
  • Сколько open issues?
  • Есть ли security policy?
  • Альтернативы?

Tools:

  • bundlephobia.com — размер
  • npmgraph.js.org — граф зависимостей
  • snyk advisor — score безопасности
  • npms.io — общая оценка

6. Минимизируй deps

Чем меньше — тем меньше attack surface.

  • Дубли (moment + date-fns + dayjs — выбери одну)
  • Малые утилиты которые можно написать самому (10 строк вместо пакета)
  • Heavy frameworks где не нужны (Lodash → native methods)

7. Subresource Integrity для CDN

<script src="https://cdn.example.com/lib.js"
        integrity="sha384-abc123..."
        crossorigin="anonymous"></script>

Браузер проверит что content не изменён.

8. Защита от dependency confusion

Если используешь private packages:

  • @yourorg/package (scoped) — не путается с public
  • .npmrc с registry:
@yourorg:registry=https://npm.yourcompany.com

9. SBOM (Software Bill of Materials)

Спецификация всех dependencies для compliance:

  • npm sbom --output sbom.spdx.json
  • syft (Anchore)
  • Хранить как артефакт билда

10. Monitoring runtime

  • Sentry / Datadog для catching anomalies
  • WAF (Cloudflare) для блока known attacks
  • Алёрты на новые CVE в твоих deps (GitHub автоматически)

Что делать при найденной vulnerability

1. Оцени severity (CVSS score)
2. Проверь exploitability в твоём контексте
3. Patch:
   - High/Critical → немедленно
   - Medium → в течение недели
   - Low → следующий release
4. Если нет fix — workaround (отключить feature, заменить lib)
5. Notify юзеров если их данные могли быть скомпрометированы

Анти-паттерны

  • npm install -g всё подряд (global = атака на всю систему)
  • ❌ Игнорировать npm audit warnings
  • yarn install в продакшене (использует registry на каждом install)
  • ❌ Один pinned major (через 2 года 50 CVE)
  • postinstall скрипты в зависимостях без review

Чек-лист

  • Lock file в git
  • CI запускает audit на каждом PR
  • Dependabot настроен
  • Critical deps pinned exactly
  • SBOM генерируется
  • Security alerting включён
К подразделу «Безопасность»
Похожие промты