Безопасен ли этот подход 2FA?
Я следую тому же подходу, который описан здесь.
Я использую https://github.com/PHPGangsta/GoogleAuthenticator вот так:
$ga = new \PHPGangsta_GoogleAuthenticator();
$qrCodeUrl = $ga->getQRCodeGoogleUrl(urlencode('trading.com/'.$user->email), $user->two_fa_secret);
Если у пользователя есть адрес электронной почты = someguy@mysite.com, приложение покажет "trading.com/someguy@mysite.com". И второй параметр - это фактический секрет, используемый для генерации кода.
Что меня беспокоит, так это то, что он генерирует следующее:
<img src="https://api.qrserver.com/v1/create-qr-code/?data=otpauth%3A%2F%2Ftotp%2Ftrading.com%252Fsomeguy%2540mysite.com%3Fsecret%3D4UYJ************&size=200x200&ecc=M" alt="Loading....">
Секрет фактического приложения: XOB*************, поэтому он не раскрывает фактический секрет в URL-адресе. Но разве нельзя использовать этот URL злонамеренно?
Мне интересно:
- если мне, возможно, не следует использовать URL-адрес для загрузки QR-кода вместо отображения его с URL-адресом, который генерирует библиотека PHPGansta?
- если api.qrserver.com не представляет угрозы безопасности, я имею в виду, кто они? Я отправляю им всю информацию, необходимую для прохождения аутентификации 2fa. Так что взлом api.qrserver.com был бы очень плохим для меня. Или api.qrserver.com = google, значит, все в порядке?
1 ответ
Да, вы не ошиблись... идея кажется ужасной.
Таким образом, даже если буквальный секрет не отображается в URL-адресе, QR-кода достаточно для генерации действительных кодов 2FA.
И да, вы отправляете этот код третьей стороне. Я бы настоятельно не советовал этого делать.
Также вы используете библиотеку под названием PHPGangsta, и она не обновлялась с 2016 года. Ничего из этого не вызывает доверия.