# Безопасность ## Базовые требования - `.env` — всегда в `.gitignore`. Никогда не коммитить. - JWT: HS256, access_token = 60 минут, refresh_token = 30 дней - Пароли: bcrypt через passlib - Pydantic валидация на всех входах - RBAC: роли `user` и `admin` (`is_superuser`) ## Аутентификация ```python # app/core/security.py def create_access_token(data: dict, expires_delta: timedelta | None = None) -> str def decode_token(token: str) -> dict[str, Any] | None def hash_password(password: str) -> str def verify_password(plain: str, hashed: str) -> bool ``` ## RBAC | Роль | Права | |------|-------| | user | CRUD своих идей, запуск анализа | | admin | Управление пользователями, просмотр логов, системные настройки | ## Sensitive data **Никогда не логировать:** - Пароли (даже хэш) - JWT токены - API keys и секреты - Email в открытом виде (только user_id) **Маскировать:** - Email: `u***@mail.ru` - IP: `195.208.*.*` ## Secrets management | Окружение | Где хранить | |-----------|-------------| | Local | `.env` (в .gitignore) | | Staging/Prod | GitHub Secrets | Без Vault (< 10 разработчиков). JWT_SECRET_KEY менять при утечке или раз в год. ## Запланировано - OAuth2 (Yandex, Google) — Authlib - Rate limiting — slowapi - CORS — FastAPI middleware (настроен)