Exile
Administrator
Привет.
Продолжаем серию статей о нововведениях в третьей версии. Сегодня поговорим о безопасности аккаунтов – в TorrentPier появилась полноценная двухфакторная аутентификация на базе TOTP.
Статус 2FA виден только самому пользователю и администраторам.
Важный момент: если глобально отключить 2FA, пользователи, у которых она уже была включена, все равно смогут ее отключить в настройках. Мы не блокируем людей с включенной 2FA при смене конфигурации.
Продолжаем серию статей о нововведениях в третьей версии. Сегодня поговорим о безопасности аккаунтов – в TorrentPier появилась полноценная двухфакторная аутентификация на базе TOTP.
Что было
Никакой двухфакторки не было. Пароль – единственный рубеж между злоумышленником и аккаунтом. Утек пароль – потерял аккаунт. Для обычного пользователя это неприятно, а для администратора или модератора трекера – катастрофа.Что стало
В версии 3.0 добавлена полноценная двухэтапная верификация по стандарту TOTP (RFC 6238). Работает с любым приложением-аутентификатором: Google Authenticator, Authy, 1Password, Bitwarden и другими.Как это выглядит для пользователя
В панели управления профилем появился новый раздел/profile/two-step. Процесс подключения:- Нажимаете «Включить» – система генерирует секретный ключ
- Сканируете QR-код приложением-аутентификатором (или вводите ключ вручную)
- Вводите шестизначный код из приложения для подтверждения
- Получаете набор резервных кодов – сохраняете их в надежном месте
Как работает вход
Процесс авторизации с 2FA:- Пользователь вводит логин и пароль – пароль проверяется как обычно
- Если у пользователя включена 2FA, создается временная «pending»-сессия в кеше, привязанная к IP, с TTL 5 минут
- Показывается форма для ввода кода
- Код проверяется – временная сессия потребляется, создается настоящая сессия
- Если код неверный – счетчик ошибок. После 5 неудачных попыток – блокировка на 15 минут, pending-токен уничтожается
Меры безопасности
Мы постарались закрыть типичные уязвимости:- Шифрование секретов. 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', ''),
],
Что это дает
- Защита аккаунтов. Даже при утечке пароля злоумышленник не попадет в аккаунт без второго фактора
- Стандартный подход. TOTP по RFC 6238 – работает с десятками приложений-аутентификаторов
- Резервные коды. Не потеряете доступ, если телефон сломался или потерялся
- Шифрование на всех уровнях. Секреты зашифрованы в базе, коды захешированы, сессии привязаны к IP
- Контроль для администратора. Возможность сбросить 2FA пользователю при обращении в поддержку