🛡️ Архитектура защиты

Безопасность на каждом уровне стека

VoyageTeam строит системы, где защита не патч поверх кода — она вшита в архитектуру. Каждый эндпоинт, каждая сессия, каждая строка в базе данных проходит через многоуровневую систему проверок.

01

🌐 SSL/TLS + HSTS: Шифрование всего трафика

Весь трафик между пользователем и нашими серверами защищён протоколами TLSv1.2 и TLSv1.3 с аппаратными шифрами ECDHE-RSA/ECDSA AES-256-GCM. Сертификаты Let's Encrypt обновляются автоматически.

Заголовок Strict-Transport-Security: max-age=63072000; includeSubDomains; preload гарантирует, что браузер никогда не попытается соединиться с нашим доменом по незашифрованному HTTP — даже при первом визите.

  • Perfect Forward Secrecy: каждая сессия использует уникальные ключи — перехват одной не раскрывает другие.
  • OCSP Stapling: ускоренная проверка сертификата без обращения к центру сертификации при каждом запросе.
02

🚦 Rate Limiting: Многоуровневая защита от перегрузки

Мы реализовали двухуровневый Rate Limiter — на уровне Nginx и внутри FastAPI.

Nginx-уровень: максимум 10 req/s для API и 30 req/s для статики с burst-буфером. Максимум 10 одновременных соединений с одного IP.

FastAPI-уровень (SimpleRateLimitMiddleware):

  • Чувствительные эндпоинты (/portal/login, /portal/verify-login, /request-password-recovery, /reset-password): 5 запросов в минуту с одного IP.
  • Стандартные API-запросы: 60 запросов в минуту.
  • Попытка брутфорса пароля с одного IP будет заблокирована уже на 6-й попытке.
03

🔒 Двухфакторная аутентификация (2FA) для клиентов

Каждый вход в Личный кабинет (my.voyageteam.xyz) проходит через обязательную 2FA:

  • После ввода логина и пароля, система генерирует 6-значный OTP-код.
  • Код отправляется на зарегистрированный email клиента через защищённые SMTP-серверы (mail.voyageteam.online).
  • Код действителен строго ограниченное время (TTL). После истечения — автоматически инвалидируется.
  • Восстановление пароля требует двойного подтверждения: код из Email + код из Telegram-бота.
04

🗄️ Шифрование базы данных SQLite

Все данные хранятся в зашифрованной SQLite базе с использованием AES-256 через SQLCipher. Ключ шифрования (DB_ENCRYPTION_KEY) хранится только в переменных окружения на сервере и никогда не попадает в репозиторий или логи.

  • Пароли хранятся только как bcrypt-хэши (work factor 12).
  • Все персональные данные клиентов шифруются на уровне записи.
  • Физический доступ к серверу без ключа не позволяет прочитать базу.
05

🔥 Anti-Spam Firewall для подписок и заявок

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

  • Блокировка временных email: автоматический список 500+ известных tempmail-доменов (mailnull.com, throwam.com, guerrillamail.com и др.).
  • Синтаксическая валидация: строгая проверка формата email по RFC 5322.
  • Email-верификация: заявка на разработку принимается только после подтверждения кода на email — это исключает спам-боты и фейковые адреса.
  • Rate Limit по IP: защита от флуда запросами.
06

🤖 Защита от сканеров и ботов через Nginx

Наш Nginx-конфиг активно блокирует автоматические сканеры уязвимостей:

  • Блокировка всех запросов к .php, .asp, .env, .git, .sql, .bak, .yml файлам — возвращаем 403 Forbidden.
  • Блокировка путей /wp-admin, /phpmyadmin, /xmlrpc, /shell, /cmd и других типичных векторов атак.
  • Минимальные таймауты клиентских соединений (10s body, 10s header) защищают от Slowloris-атак.
  • Заголовок X-Content-Type-Options: nosniff предотвращает MIME-sniffing атаки.
  • X-Frame-Options: SAMEORIGIN блокирует Clickjacking через iframe.

Есть вопросы по безопасности вашего проекта? Обсудим архитектуру защиты.

Обсудить проект →