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

Доступ к данным — по правилам.

Компания, касса и клиентский кабинет используют разные права доступа. Сервер проверяет их при каждом запросе, а финансовые операции сохраняются в журнале.

Защита в коде

Эти свойства уже являются частью архитектуры и проверяются интеграционными тестами.

01

Изоляция компаний

Tenant определяется только из проверенной сессии или API-ключа. Клиент запроса не может выбрать чужую компанию через body или query.

02

Секреты не хранятся открыто

Пароли защищены scrypt; API-ключи, OTP и portal-сессии сохраняются как необратимые digest. Payload уведомлений и webhook-секреты шифруются.

03

Финансовые команды повторяемы

Начисление, списание и продажа требуют Idempotency-Key. Повтор с тем же содержимым возвращает прежний результат, а подмена payload отклоняется.

04

Ограниченные полномочия

Ключи получают только нужные scopes, имеют срок действия и могут быть отозваны или ротированы без смены данных компании.

05

Защита от злоупотреблений

Авторизация, OTP и платные уведомления ограничены устойчивыми multi-instance счётчиками с Retry-After.

06

Безопасный веб-кабинет

Браузер не видит BFF-секрет и FastAPI session token. Сессия находится в HttpOnly-cookie; мутации проверяют Origin, Fetch Metadata и JSON content type.

Минимум доверия

Браузер — не хранилище секретов.

Nuxt выступает backend-for-frontend. Только серверный слой знает отдельный BFF credential и передаёт opaque-сессию FastAPI.

01БраузерHttpOnly cookie · same-origin
→
02Nuxt BFFCSRF guard · fixed upstream
→
03FastAPISession digest · tenant role
→
04PostgreSQLTransactions · row locks

Честный статус

Что нужно закрыть до production.

Аудит не нашёл открытых Critical в проверенном коде, но production-безопасность нельзя доказать только unit-тестами репозитория.

  1. 01Подтвердить edge/WAF rate limits и защиту от slow clients.
  2. 02Закрыть egress worker на private, link-local и metadata сети.
  3. 03Включить PostgreSQL backups/PITR и провести восстановление.
  4. 04Провести load/soak, incident и rollback rehearsal.
  5. 05Утвердить retention, тексты согласий и договоры с обработчиками ПДн.
  6. 06Просканировать финальный container image и физически принять приложение на ЭВОТОР.
Важно

Публичная формулировка «дыр нет» была бы недостоверной. Безопасность — это проверяемый процесс: код, инфраструктура, люди, мониторинг и регулярные повторные аудиты.