Адрес небезопасной генерации случайных чисел в PHP

Мы выполняем сканирование Fortify на различных модулях Drupal, и общий критический / высокий результат - "Небезопасная случайность". В нем говорится, что функция rand() не может противостоять криптографической атаке.

Мой вопрос - это серьезная проблема? Как это исправить в PHP?

Спасибо.

2 ответа

Решение

Ответ на этот вопрос полностью зависит от того, для чего вы используете результаты вызова rand().

Если вы используете их для таких вещей, как криптографические ключи, где безопасность инструмента зависит от случайности ваших случайных чисел, то да, это серьезная проблема. В этом случае не следует вызывать rand() или mt_rand(), так как оба не выдают "случайные" числа, которые являются достаточно случайными, чтобы на них можно было положиться при криптографическом использовании. Вы действительно хотите использовать платформу, на которой вы работаете, на базовом генераторе псевдослучайных чисел (PRNG) - /dev/urandom в системе Unix/Linux или crypto-api в системе Windows - так как они были тщательно изучены и дают результаты действительно случайные числа, которые подходят для использования в криптосистемах. PHP не облегчает доступ к этим случайным источникам, но существуют примеры того, как это сделать (например, это -> http://www.php.net/manual/en/function.mt-rand.php).

Если вы используете случайные значения для чего-то другого, например, для рандомизации того, какой вариант представлен пользователю вначале, или для чего-то подобного, когда полученные числа не используются каким-либо криптографическим способом, то вы можете избежать использования rand() или mt_rand(). Но если ваши приложения / модули полагаются на хорошие случайные числа для своей безопасности, вам действительно нужно использовать преимущества исходных кодов ОС, как описано выше.

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