Содержание
1. Аутентификация и авторизация
JWT + Refresh токены:
Access Token → короткое время жизни (15 мин)
Refresh Token → длинное время жизни (7–30 дней), хранить в Redis
- Используй bcrypt (rounds: 12+) для хеширования паролей
- Храни refresh-токены в Redis с TTL, при логауте — инвалидируй
- Реализуй Role-Based Access Control (RBAC)
2. Защита API
Rate Limiting → express-rate-limit + redis (общий лимит на IP)
Helmet.js → HTTP-заголовки безопасности
CORS → строгий whitelist origins
Input Validation → zod / joi / class-validator
SQL Injection → parameterized queries (pg / TypeORM / Prisma)
3. PostgreSQL
- Создавай отдельного пользователя БД с минимальными правами (только нужные таблицы)
- Никогда не используй
postgressuperuser в приложении - Включи SSL соединение (
ssl: { rejectUnauthorized: true }) - Шифруй чувствительные данные (PII) —
pgcryptoили на уровне приложения - Регулярные бэкапы + мониторинг логов
CREATE USER app_user WITH PASSWORD 'strong_password'; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;
4. Redis
- Обязательно ставь пароль (
requirepassв redis.conf) - Отключи опасные команды:
FLUSHALL,CONFIG,DEBUG - Redis не должен быть доступен публично — только внутренняя сеть
- Используй TLS если Redis на отдельном сервере
- Устанавливай TTL для всех ключей (никаких бессрочных сессий)
# redis.conf requirepass your_strong_password bind 127.0.0.1 rename-command FLUSHALL "" rename-command CONFIG ""
5. Переменные окружения и секреты
- Никогда не хардкоди секреты в коде
- Используй
.env+ dotenv в разработке, в проде — секреты из Vault / AWS Secrets Manager / K8s Secrets - Добавляй
.envв.gitignore - Валидируй переменные окружения при старте (zod/envalid)
6. Защита от атак
| Атака | Защита |
|---|---|
| SQL Injection | Parameterized queries, ORM |
| XSS | helmet CSP, sanitize input/output |
| CSRF | SameSite cookies, CSRF-токены |
| Brute Force | Rate limiting, временные блокировки в Redis |
| DoS | Rate limiting, payload size limit (express.json({ limit: '10kb' })) |
| Session Hijacking | Secure/HttpOnly cookies, HTTPS only |
7. HTTPS и транспорт
- Только HTTPS в продакшне (Let’s Encrypt / certbot)
- HSTS заголовок (
Strict-Transport-Security) - Используй nginx как reverse proxy перед Node.js — не открывай Node напрямую
8. Зависимости и код
npm audit # проверка уязвимостей npm audit fix # автоисправление
- Регулярно обновляй зависимости
- Используй Snyk или Dependabot для автоматического мониторинга
- Следи за CVE для используемых пакетов
9. Логирование и мониторинг
- Логируй все попытки входа (успешные и неуспешные)
- Не логируй пароли, токены, PII данные
- Используй Winston / Pino + централизованный сбор логов (ELK / Grafana Loki)
- Настрой алерты на аномальную активность
10. Минимальный чеклист перед деплоем
- Все секреты в переменных окружения
- HTTPS включён
- Rate limiting настроен
- Helmet.js подключён
-
npm audit— 0 критических уязвимостей - PostgreSQL пользователь с минимальными правами
- Redis защищён паролем и закрыт снаружи
- Логирование настроено
- Входные данные валидируются
