Безопасно ли использовать rand для генерации кода подтверждения? PHP

Когда пользователь хочет сбросить свой пароль, я отправляю на его электронную почту 6-значный код, затем я проверяю, вводит ли пользователь соответствующий код!

Я генерирую код с помощью функции rand:

$code = rand ( 100000, 999999 );

это безопасно делать?

1 ответ

Допустим, вы хотите сбросить пароль привилегированного пользователя. Все, что нужно сделать злоумышленнику, - это выполнить сброс настроек для непривилегированной учетной записи (или нескольких учетных записей), которой он управляет, чтобы предсказать следующее случайное значение. Это означает, что они могут затем запросить сброс пароля для привилегированного пользователя (например, "Администратор"), а затем принять учетную запись.

Дополнительная информация:

Если вам действительно нужны непредсказуемые случайные числа для какой-либо функции безопасности, не стесняйтесь использовать эту библиотеку, которую я написал и поддерживаю:

https://github.com/resonantcore/lib/blob/master/src/Secure.php

$iRandom = \Resonantcore\Lib\Secure::random(100000, 999999);

Обратите внимание, что это скоро будет принято / реорганизовано в этот репозиторий в ближайшем будущем (и предлагаемые функции могут даже превратить его в ядро ​​PHP 7): https://github.com/SammyK/php-src-csprng

$iRandom = random_int(100000, 999999);

Это еще не там, хотя. Мой код работает сегодня.

Если вы мне не доверяете, вы также можете проверить замечательный проект Энтони Феррары RandomLib: https://github.com/ircmaxell/RandomLib

$factory = new RandomLib\Factory;
$generator = $factory->getGenerator(new SecurityLib\Strength(SecurityLib\Strength::MEDIUM));

$iRandom = $generator->generateInt(100000, 999999);

Не использовать rand() или же mt_rand() для любой аутентификации (или обхода аутентификации). Когда-либо.

Кроме того, вы можете использовать что-то с большим пространством грубой силы, чем 6-значное число. 32-байтовая строка в шестнадцатеричном формате должна быть достаточной для остановки как практических, так и всех известных теоретических атак.

Другие вопросы по тегам