TorrentPier 3.0: двухэтапная аутентификация

Exile

Administrator
Привет.

Продолжаем серию статей о нововведениях в третьей версии. Сегодня поговорим о безопасности аккаунтов – в TorrentPier появилась полноценная двухфакторная аутентификация на базе TOTP.

Что было​

Никакой двухфакторки не было. Пароль – единственный рубеж между злоумышленником и аккаунтом. Утек пароль – потерял аккаунт. Для обычного пользователя это неприятно, а для администратора или модератора трекера – катастрофа.

Что стало​

В версии 3.0 добавлена полноценная двухэтапная верификация по стандарту TOTP (RFC 6238). Работает с любым приложением-аутентификатором: Google Authenticator, Authy, 1Password, Bitwarden и другими.

Как это выглядит для пользователя​

В панели управления профилем появился новый раздел /profile/two-step. Процесс подключения:
  1. Нажимаете «Включить» – система генерирует секретный ключ
  2. Сканируете QR-код приложением-аутентификатором (или вводите ключ вручную)
  3. Вводите шестизначный код из приложения для подтверждения
  4. Получаете набор резервных кодов – сохраняете их в надежном месте
После включения при каждом входе система запрашивает код из приложения. Если телефон недоступен – можно ввести один из резервных кодов.

1771264365890.webp
1771264406732.webp


Как работает вход​

Процесс авторизации с 2FA:
  1. Пользователь вводит логин и пароль – пароль проверяется как обычно
  2. Если у пользователя включена 2FA, создается временная «pending»-сессия в кеше, привязанная к IP, с TTL 5 минут
  3. Показывается форма для ввода кода
  4. Код проверяется – временная сессия потребляется, создается настоящая сессия
  5. Если код неверный – счетчик ошибок. После 5 неудачных попыток – блокировка на 15 минут, pending-токен уничтожается
1771264581035.webp


Меры безопасности​

Мы постарались закрыть типичные уязвимости:
  • Шифрование секретов. AES-256-GCM, ключ задается через переменную окружения TOTP_ENCRYPTION_KEY
  • Replay protection. SHA-256 хеш принятого кода кешируется на время окна верификации – один код нельзя использовать дважды
  • Rate limiting. 5 попыток, потом 15-минутный локаут
  • Привязка к IP. Pending-сессия действительна только для того IP, с которого был введен пароль
  • Автологин. При включении 2FA все запомненные сессии аннулируются

Администрирование​

Администратор может отключить 2FA любому пользователю через его профиль (AJAX-действие с подтверждением). При этом свою собственную 2FA администратор из админки отключить не может – только через настройки профиля. Это защита от случайного снятия 2FA с самого себя.

Статус 2FA виден только самому пользователю и администраторам.

Конфигурация​

Настройки в config/auth.php:
PHP:
'two_factor' => [
    'enabled' => true,            // Глобальный переключатель
    'issuer' => 'TorrentPier',    // Имя в приложении-аутентификаторе
    'digits' => 6,                // Количество цифр в коде
    'period' => 30,               // Период генерации в секундах
    'algorithm' => 'sha1',        // Алгоритм HMAC
    'window' => 1,                // Окно допуска (+-1 период)
    'recovery_codes_count' => 8,  // Количество резервных кодов
    'max_attempts' => 5,          // Попыток до блокировки
    'lockout_duration' => 900,    // Длительность блокировки (сек)
    'encryption_key' => env('TOTP_ENCRYPTION_KEY', ''),
],
Важный момент: если глобально отключить 2FA, пользователи, у которых она уже была включена, все равно смогут ее отключить в настройках. Мы не блокируем людей с включенной 2FA при смене конфигурации.

Что это дает​

  • Защита аккаунтов. Даже при утечке пароля злоумышленник не попадет в аккаунт без второго фактора
  • Стандартный подход. TOTP по RFC 6238 – работает с десятками приложений-аутентификаторов
  • Резервные коды. Не потеряете доступ, если телефон сломался или потерялся
  • Шифрование на всех уровнях. Секреты зашифрованы в базе, коды захешированы, сессии привязаны к IP
  • Контроль для администратора. Возможность сбросить 2FA пользователю при обращении в поддержку

Что дальше​

Двухфакторная аутентификация – часть масштабного обновления безопасности в TorrentPier 3.0. В следующих статьях расскажем о других нововведениях.
 
Back
Top