в session
раздел php.ini
есть директива под названием session.entropy_length
,
Я знаю, что он используется для того, чтобы сделать идентификатор сеанса «более случайным».
Как это делает идентификатор сеанса более случайным?
Какова максимальная длина?
Что делать, если его длина превышает биты hash
в использовании?
session_id
хэш IP-адреса клиента (32 бита), текущей временной метки и микросекунды (52 бита), а также значения, сгенерированного из php combined lcg()
функция генераторов случайных чисел Псевдо (PRNG) (64 бита). Энтропия составляет 148 бит. Однако это число не следует рассматривать как абсолютное минимальное значение, поскольку IP-адрес и временная метка хорошо известны из того, кто создает сеанс.
Когда доступно нежелательно низкое количество энтропии, можно восстановить PRNG семя из идентификатора сессии. С учетом того, что PHP использует одни и те же источники энтропии для разных генераторов, это стало еще проще.
Семя используется для генерации других псевдослучайных значений, поэтому, если злоумышленник может получить начальное значение, он может предсказать все будущие выходные данные (включая, но не только, mt_rand()
а также rand
). Это не хорошо.
session.entropy_length
количество байтов, которые будут считаны из файла энтропии, обычно /dev/urandom
или же /dev/arandom
(из документации).
Если вы предоставляете случайный источник, такой как /dev/random
то энтропия тем больше, а сила генерируемой session_id
сильнее.
Других решений пока нет …