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.jsonsyft(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 auditwarnings - ❌
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 включён
Похожие промты
site / security
Content Security Policy и security headers
CSP, HSTS, X-Frame, Permissions-Policy — закрыть основные классы атак за один проход.
securitycspheaders
Открыть
Продвинутый30-60 мин
site / security
Управление секретами
Где хранить, как ротировать, как обнаружить утечку.
securitysecrets
Открыть
Средний30-60 мин
site / security
Аутентификация и rate limiting
Защита логина, реги, восстановления пароля от brute force.
securityauthrate-limit
Открыть
Продвинутый30-60 мин