Usted tiene algunas opciones aquí:
1 - Descargar un volcado de un verdadero generador de números aleatorios (this one ofertas vertederos de uno basado en la desintegración radiactiva) y el uso que, sólo asegúrese de que usted no mantiene la lectura de la misma nn bytes. Un poco torpe, pero una opción.
2 - Tener el PHP ejecutar algo que se lee de /dev/urandom
en su nombre (FEO)
3 - caer de nuevo mt_rand()
(también feo, pero he visto este hecho):
for ($i = 0; $i < $count/8; $i++) {
$output .= dechex(mt_rand(0, 0x7fffffff));
}
Todas las opciones son torpes y desagradables, desafortunadamente. Lo mejor que puede hacer es asegurarse de no tener que lidiar con open_basedir
. Aún así, esta molestia particular podría ser solucionada.
Por último - no es probable que volar con su anfitrión, pero quizás vale la pena intentarlo:
Usted puede preguntar a su huésped para proporcionar urandom
en su directorio personal para que pueda leerlo. Dígales que necesita acceder a urandom para generar números aleatorios para que pueda proporcionar una mejor seguridad para sus usuarios, a continuación, pedir que se ejecuten:
mknod urandom c 1 9
en su directorio personal. Lo probé en mi propio servidor, funciona (pero root necesita hacerlo por ti). Hay no razón práctica para evitar el uso del generador de números pseudoaleatorios del sistema, que de otro modo podría hacer con cualquier otra cosa que no sea PHP. De hecho, esta es la manera más fácil para que puedan tener acceso a urandom
porque no requiere excepciones en la configuración de PHP o vhost.
Dejar de usar el acceso a /dev/random
es una medida razonable, ya que /dev/random
debe reponerse con la entropía del sistema disponible (nueva) y puede causar bloqueos importantes al leer si está agotada, lo que podría ocurrir frecuentemente en servidores con poco tráfico.Sin embargo, se garantiza que el bloque /dev/urandom
nunca se bloqueará, ya que solo reutiliza el grupo de entropía interno una vez que se haya agotado, por lo que es una fuente de menor calidad.
Nota
No estoy diciendo que la idea de open_basedir
es una mala, pero rompe código buena también. Un clásico chroot
es mucho mejor, pero más difícil, por lo que te encuentras con open_basedir
mucho más que con un verdadero chroot. Como mínimo, cualquier programa debe poder acceder a los dispositivos null
, zero
y urandom
en un servidor.
Explicación realmente agradable. – elliotrock