Технически

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

Эта страница описывает действующие меры защиты 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 часов.