Supply Chain Security
Атаки на цепочку поставок (event-stream 2018, ua-parser-js 2021, node-ipc 2022, xz-utils 2024) нанесли ущерб миллионам проектов; TechLead обязан выстроить процессы верификации зависимостей, а вопросы о npm audit, lockfile и SRI встречаются в security-собеседованиях всё чаще.
// Аудит зависимостей и управление версиями
// npm audit: проверка зависимостей против базы CVE// $ npm audit — показать все уязвимости// $ npm audit --audit-level=high — fail CI при high/critical// $ npm audit fix — автоматическое исправление (minor/patch)// $ npm audit fix --force — включает major updates (может сломать API)
// Lockfile: ВСЕГДА коммитить package-lock.json / yarn.lock / pnpm-lock.yaml// Без lockfile: npm install на CI может поставить другую версию → непредсказуемость
// npm ci vs npm install:// npm ci: строго по lockfile, удаляет node_modules, fail если lockfile расходится// npm install: обновляет lockfile → непредсказуемо в CI, не использовать!
// package.json: exact pinning vs ranges// "lodash": "4.17.21" ← точная версия → предсказуемо, но нет auto-patch// "lodash": "^4.17.21" ← minor+patch → может поставить уязвимую 4.17.22// Рекомендация: использовать точные версии + Dependabot для controlled updates// Subresource Integrity (SRI): верификация CDN-ресурсов// Браузер вычисляет хэш загруженного ресурса и сравнивает с integrity-атрибутом.// Если CDN скомпрометирован → другой хэш → ресурс заблокирован.
// Генерация хэша:// $ openssl dgst -sha384 -binary app.js | openssl base64 -A// Или online: https://www.srihash.org
// HTML с SRIconst sriExample = `<script src="https://cdn.example.com/lib.min.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.example.com/style.css" integrity="sha384-abc123..." crossorigin="anonymous"/>`;
// В Node.js: package-lock.json хранит integrity (sha512) для каждого пакета// "integrity": "sha512-abc...=="// npm install перепроверяет хэши при каждой установке → защита от tampered registry// Продвинутые практики Supply Chain Security
// 1. ignore-scripts: отключить postinstall-скрипты (главный вектор атаки)// .npmrc или npm config:// ignore-scripts=true// Осторожно: node-gyp-зависимые пакеты требуют scripts (native modules)
// 2. npm provenance (npm 9.5+): привязка пакета к конкретному CI-билду на GitHub Actions// $ npm publish --provenance// Пользователи могут проверить: npm view <pkg> dist.integrity + provenance
// 3. Dependabot / Renovate: автоматические PR на обновление зависимостей// .github/dependabot.yml:// version: 2// updates:// - package-ecosystem: npm// directory: /// schedule: { interval: weekly }// groups:// patch-updates: { update-types: ['patch'] } // авто-merge патчей// open-pull-requests-limit: 10
// 4. SBOM (Software Bill of Materials): инвентаризация для compliance + incident response// $ npx @cyclonedx/cyclonedx-npm --output-file sbom.cdx.json --output-format JSON
// 5. Поведенческий анализ: Socket.dev / Snyk / OSS Index// Обнаруживают: network calls в install scripts, obfuscated code,// typosquatting (lodahs вместо lodash), смену maintainer с подозрительными коммитами,// новые зависимости добавленные без изменения функциональности (backdoor pattern)Итог: Supply chain безопасность строится на lockfile + npm audit + SRI + минимизации install-скриптов + автоматическом мониторинге через Dependabot/Socket.