¿Qué tan único es el ID de sesión de php? Varias cosas que he leído me dan la impresión de que no debería confiar en que dos usuarios nunca obtengan el mismo ID de sesión. ¿No es un GUID?
90
De hecho, Session_id se puede duplicar, pero la probabilidad es muy baja. Si tiene un sitio web con un tráfico justo, puede suceder una vez en la vida de su sitio web y solo molestará a un usuario por una sesión.
No vale la pena preocuparse por esto a menos que espere construir un sitio web de mucho tráfico o un servicio para la industria bancaria.
No es muy exclusivo como se envía. En la configuración predeterminada, es el resultado de un hash de varias cosas, incluido el resultado de gettimeofday (que no es terriblemente único), pero si está preocupado, debe configurarlo para extraer algo de entropía de / dev / urandom, así
busque "php_session_create_id" en el código para el algoritmo real que están usando.
Editado para agregar: hay un generador de números aleatorios DFA sembrado por el pid, mezclado con el tiempo en usecs. No es una condición de singularidad firme, especialmente desde una perspectiva de seguridad . Utilice la configuración de entropía anterior.
Actualizar:
fuente
Si desea saber cómo PHP genera una ID de sesión de forma predeterminada, consulte el código fuente en Github . Ciertamente no es aleatorio y se basa en un hash (predeterminado: md5) de estos ingredientes (vea la línea 310 del fragmento de código):
Si el sistema operativo tiene una fuente aleatoria disponible, entonces la fuerza de la ID generada con el propósito de ser una ID de sesión es alta ( / dev / urandom y otras fuentes aleatorias del sistema operativo son (generalmente) PRNG criptográficamente seguras ). Sin embargo, si no es así, es satisfactorio.
El objetivo de la generación de identificación de sesión es:
Esto se logra mediante el enfoque de PHP para la generación de sesiones.
No puede garantizar absolutamente la singularidad , pero las probabilidades de acertar el mismo hash dos veces son tan bajas que, en términos generales, no vale la pena preocuparse.
fuente
Puede instalar una función de generación de hash alternativa si desea personalizar la forma en que se genera la ID (es un número de 128 bits generado a través de MD5 de forma predeterminada). Ver http://www.php.net/manual/en/session.configuration.php#ini.session.hash-function
Para obtener más información sobre las sesiones de PHP, pruebe este excelente artículo http://shiflett.org/articles/the-truth-about-sessions que también contiene enlaces a otros artículos sobre la fijación y el secuestro de sesiones.
fuente
Tamaño de session_id
Suponga que seeion_id está distribuido uniformemente y tiene un tamaño = 128 bits. Suponga que todas las personas del planeta inician sesión una vez al día con una nueva sesión persistente durante 1000 años.
Entonces, la probabilidad de una o más colisiones es menos de uno en 70 mil billones. Por lo tanto, el tamaño de 128 bits del session_id debería ser lo suficientemente grande. Como se mencionó en otros comentarios, session_manager también puede verificar que el nuevo session_id aún no existe.
Aleatoriedad
Por lo tanto, la gran pregunta que creo es si los session_id: s se generan con una buena pseudoaleatoriedad. De eso nunca puede estar seguro, pero recomendaría usar una solución estándar bien conocida y de uso frecuente para este propósito (como probablemente ya lo haga).
Incluso si se evitan las colisiones debido a la verificación, la aleatoriedad y el tamaño de session_id es importante, por lo que los piratas informáticos no pueden, de alguna manera, realizar conjeturas calificadas y encontrar session_id: s activos con gran probabilidad.
fuente
No he encontrado una confirmación sobre esto, pero creo que php verifica si ya existe una identificación de sesión antes de crear una con esa identificación.
El problema del secuestro de sesiones que preocupa a la gente es cuando alguien descubre la identificación de sesión de un usuario activo. Esto se puede prevenir de muchas maneras, para obtener más información al respecto, puede ver esta página en php.net y este documento sobre la fijación de sesiones.
fuente
No, el ID de sesión no es un GUID, pero dos usuarios no deben obtener el mismo ID de sesión ya que están almacenados en el lado del servidor.
fuente
si su nombre de usuario es diferente o único, puede usar este código para la sesión
fuente