Для моих клиентов мне нужно создать токены носителя, чтобы иметь возможность аутентифицироваться в моем API. Следовательно, чтобы создать их, мне пришло в голову random_bytes
: https://www.php.net/manual/en/function.random-bytes.php
Но в реализации, которую я видел с использованием mt_rand
, вместо этого используется именно этот фрагмент кода:
function gen_bearerToken(int length): string
{
$bearer="";
$pool='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRTUVWXYZ';
for($i=0;i<$length;i++){
$bearer .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
}
return $bearer;
}
Но, как я вижу, mt_rand
https://www.php.net/manual/en/function.mt-rand.php не генерирует криптографически безопасные случайные байты, поэтому я предполагаю, что будут сгенерированы слабые токены, которые легко угадать.
Кроме того, история доказала, что специальные решения часто терпят неудачу с точки зрения безопасности, а не проверенные временем решения. Я ошибаюсь, чтобы беспокоиться, или с достаточно большой длиной (> 100) я буду в порядке с точки зрения безопасности?
mt_rand
слабый, зачем вообще беспокоиться об этом вместо того, чтобы использовать заведомо исправный PRNG? - person deceze♦   schedule 17.10.2019