Безопасность

Тема дорожной карты · Node.js

Безопасность Node.js охватывает широкий набор практик для защиты серверных приложений от распространённых уязвимостей, включая инъекционные атаки, слабую аутентификацию, небезопасные зависимости и ненадлежащее управление секретами. Npm-пакет helmet является первым уровнем защиты в Express.js middleware для HTTP-безопасности Node.js: он устанавливает защитные заголовки Content-Security-Policy, X-Frame-Options и Strict-Transport-Security, снижающие риск XSS, кликджекинга и атак на протокол. Безопасность зависимостей — серьёзная проблема в экосистеме npm: npm audit выявляет известные уязвимости в установленных пакетах, а инструменты вроде Snyk или Dependabot автоматизируют непрерывный мониторинг дерева зависимостей приложения Node.js на предмет вновь обнаруженных CVE. В серверной разработке на Node.js секреты никогда не должны быть жёстко прописаны или зафиксированы в системе контроля версий; вместо этого они должны передаваться через переменные окружения, читаемые из process.env и валидируемые при запуске, а файлы .env должны быть добавлены в .gitignore. Дополнительные практики безопасности Node.js включают использование параметризованных запросов для предотвращения SQL-инъекций, валидацию и санитизацию всех пользовательских данных с помощью библиотек zod или joi, ограничение частоты запросов на эндпоинтах аутентификации и запуск процесса Node.js от непривилегированного пользователя внутри Docker-контейнеров.

Как это работает

Безопасность имеет слои: валидация input (zod, ajv) на границе, параметризованные SQL-запросы, эскейп пользовательского контента в HTML (или templating engine с авто-эскейпом), HTTPS везде (терминируется на reverse proxy), секреты в env (не в репо), правильные флаги JWT/cookie (HttpOnly, Secure, SameSite). Middleware helmet добавляет разумные HTTP-заголовки (HSTS, X-Frame-Options, CSP).

Когда применять

Security-baseline с первого дня: rate-limit на auth-эндпойнтах, лимит размера body, хеш паролей через bcrypt/argon2, подпись JWT сильным секретом + короткий TTL, валидация каждого input. npm audit в CI с гейтом на high/critical. OWASP ASVS — как чек-лист при планировании. Penetration test перед публичным запуском — bug bounty дешевле инцидентов.

Типичные ошибки

Ловушки Безопасность: игнор CVE в зависимостях (каждый — потенциальный инцидент); JWT-секрет утёк в клиентский код или git-history; SQL-инъекция, потому что кто-то забыл параметр (SELECT * FROM u WHERE id = ${req.query.id} — никогда); eval или Function() на user-input; пароли в MD5/SHA1 (используйте argon2id с правильными параметрами). Security — это процесс, не разовый аудит.

Связанные понятия

Полезные ресурсы