Безопасность
Эта страница описывает действующие меры защиты production-версии: шифрование интеграций, управление сессиями, разграничение ролей, tenant isolation и аудит действий.
Шифрование credentials интеграций
Токены доступа к МойСклад и OAuth-данные Битрикс24 шифруются на стороне сервера алгоритмом Fernet (AES-128 в режиме CBC + HMAC-SHA256, библиотека cryptography). Шифротекст хранится в колонке credentials_encrypted таблицы integration_connections.
API никогда не возвращает токен в ответах — Pydantic-схема его просто не содержит. В логах токены тоже не появляются — расшифровка происходит непосредственно перед HTTP-запросом к внешнему API и сразу освобождается.
Аутентификация и сессии
- Пароли: хешируются прямым
bcrypt(12 раундов по умолчанию). В БД лежит только хеш + соль. Длинные пароли (>72 байт) детерминированно пре-хешируются через SHA-256+base64. - Access-токен: JWT (HS256), TTL 24 часа, подписан серверным секретом. Содержит
user_id,company_id,role. - Refresh-токен: отдельный JWT, TTL 7 дней. Помечен claim'ом
type: refresh, хранится по уникальномуjtiи ротируется при использовании. Повторное использование отозванного refresh-токена возвращает 401. - Защита входа: login и registration endpoints ограничены rate-limit'ом по IP.
Multi-tenant изоляция
Каждая сущность — OperationalProblem, IntegrationConnection, ProblemEvent и т.д. — содержит company_id с ON DELETE CASCADE. Все запросы фильтруются по current_user.company_id в FastAPI-зависимостях. Пользователь компании A технически не может получить данные компании B — запрос вернёт 404 ещё до проверки прав доступа к ресурсу.
Чтобы не утекать через ошибки информацию о существовании чужих ресурсов, кросс-tenant обращения возвращают 404 с detail="not_found", а не 403.
Роли и изменения данных
Роль viewer работает в режиме просмотра. Изменение интеграций, настроек, связей и статусов доступно только owner и admin; наиболее опасные действия ограничены ролью owner.
Append-only audit-trail
Каждая смена статуса и ответственного по проблеме пишется в отдельную таблицу problem_events с указанием автора (user или system), времени, прежнего и нового значения. Записи не редактируются и не удаляются через интерфейс.
При удалении пользователя actor_user_id обнуляется (FK с ON DELETE SET NULL), но событие сохраняется — в UI оно отобразится как «Удалённый пользователь».
Стек
- Backend: Python 3.12, FastAPI, SQLAlchemy 2.0, Alembic.
- БД: PostgreSQL 16, миграции через Alembic.
- Очередь: Celery + Redis для фоновых задач.
- Frontend: Next.js 15, TypeScript, без бизнес-логики на клиенте.
- Production: Docker Compose, Caddy, автоматический HTTPS, security headers и отдельные backend/frontend образы.
Что в плане
- CSP после проверки совместимости с Next.js и виджетом Битрикс24.
- Регулярная проверка восстановления production-бэкапов.
- Централизованные оповещения об ошибках интеграций и безопасности.
- Независимый pen-test перед масштабным коммерческим запуском.
Технические вопросы: support@glassbiz.ru. Сообщения об уязвимостях принимаем через тот же адрес — отвечаем в течение 48 часов.