# Безопасность модераторского сайта ## Меры безопасности ### 1. Шифрование паролей ✅ **Пароли зашифрованы с использованием bcrypt** - Используется `bcrypt.hash()` с солью 10 раундов - Пароли никогда не хранятся в открытом виде - `passwordHash` имеет `select: false` в модели User - не возвращается в API ответах ### 2. Защита API ✅ **Rate Limiting** - Авторизация: 5 попыток за 15 секунд - Отправка кода: 1 запрос в минуту - Общий лимит: 100 запросов за 15 секунд ✅ **Middleware безопасности** - Helmet - защита HTTP headers - XSS Protection - защита от XSS атак - MongoDB Sanitize - защита от NoSQL injection - HPP Protection - защита от HTTP Parameter Pollution - DDoS Protection - защита от DDoS ✅ **JWT Токены** - Access token: 5 минут жизни - Refresh token: 7 дней - Токены хранятся в httpOnly cookies в production - Секретные ключи настраиваются через .env ### 3. Защита данных ✅ **Email не возвращается в API ответах** - Email используется только для авторизации - Не включается в JWT payload - Не возвращается в `/me` и других эндпоинтах ✅ **Пароли** - Никогда не возвращаются в ответах API - Хранятся только как bcrypt hash - Проверка через `bcrypt.compare()` только при входе ### 4. Авторизация ✅ **Двухфакторная авторизация для админов** - Код подтверждения отправляется на email владельца (aaem9848@gmail.com) - Код действителен 5 минут - Fallback на Telegram если email не работает ✅ **Проверка ролей** - Все эндпоинты модерации проверяют роль пользователя - Только `moderator` и `admin` имеют доступ - Владелец имеет дополнительные права ### 5. Валидация данных ✅ **Валидация входных данных** - Email валидируется через `validator.isEmail()` - Пароль минимум 6 символов - Все данные санитизируются перед сохранением ### 6. Логирование безопасности ✅ **События безопасности логируются** - Неудачные попытки входа - Невалидные токены - Попытки несанкционированного доступа - Все события логируются через `logSecurityEvent()` ### 7. CORS и Headers ✅ **CORS настройки** - Настраивается через `MODERATION_CORS_ORIGIN` - Credentials включены для cookies - Ограниченные методы и headers ✅ **Security Headers** - X-Frame-Options: SAMEORIGIN - X-Content-Type-Options: nosniff - X-XSS-Protection: 1; mode=block - Referrer-Policy: no-referrer-when-downgrade ## Рекомендации для production 1. **Измените секретные ключи**: ```bash JWT_SECRET=your_very_secure_random_string JWT_ACCESS_SECRET=another_secure_random_string JWT_REFRESH_SECRET=yet_another_secure_random_string ``` 2. **Настройте HTTPS** (обязательно): - SSL сертификат через Let's Encrypt - Все HTTP редиректятся на HTTPS 3. **Защитите .env файл**: ```bash chmod 600 .env ``` - Не коммитьте .env в git - Используйте переменные окружения в Docker 4. **Ограничьте доступ к MongoDB**: - Используйте firewall - Ограничьте IP адреса - Используйте аутентификацию MongoDB 5. **Мониторинг**: - Следите за логами безопасности - Настройте алерты на подозрительную активность - Регулярно проверяйте логи авторизации ## Переменные окружения для безопасности ```bash # JWT секреты (ОБЯЗАТЕЛЬНО измените в production!) JWT_SECRET=your_secure_secret JWT_ACCESS_SECRET=your_access_secret JWT_REFRESH_SECRET=your_refresh_secret # Email для кодов подтверждения админа OWNER_EMAIL=aaem9848@gmail.com # CORS (ограничьте в production) MODERATION_CORS_ORIGIN=https://moderation.nkm.guru # Внутренний токен бота (опционально) INTERNAL_BOT_TOKEN=your_internal_bot_token ``` ## Проверка безопасности ```bash # Проверить что пароли не возвращаются curl -H "Authorization: Bearer YOUR_TOKEN" https://moderation.nkm.guru/api/moderation-auth/me # Проверить rate limiting for i in {1..10}; do curl -X POST https://moderation.nkm.guru/api/moderation-auth/login -d '{"email":"test@test.com","password":"wrong"}'; done # Проверить защиту от SQL injection curl -X POST https://moderation.nkm.guru/api/moderation-auth/login -d '{"email":{"$ne":null},"password":"test"}' ```