¿Dónde y cómo se almacenan los datos en una sesión?

8

¿Dónde se almacena la información en los campos de una sesión? Si yo, por ejemplo, almaceno en una sesión algo como $_SESSION['foo'] = 'bar' . ¿Dónde se almacena la "barra"?

Si almaceno un objeto de una clase, ¿de qué manera se almacena? Como $_SESSION['kart'] = new Kart(10) . ¿Podría alguien obtener la información almacenada en esa clase? ¿Cómo?

¿Podría el propietario legítimo de esa sesión modificar el valor del campo "foo"?

Y, ¿podría alguien cambiar el valor del campo "foo" en una sesión ya creada de otro usuario?

    
pregunta eversor 22.08.2012 - 08:49
fuente

2 respuestas

6

Esto depende del servidor web utilizado. Si tomamos PHP en Unix como ejemplo, puede almacenar la sesión en el sistema de archivos en la carpeta / tmp. Aquí se crea un archivo con el nombre de la ID de sesión de los usuarios prefijado con sess_ (Ejemplo: /tmp/sess_9gk8f055hd61qll6a8pjpje2n2). El contenido de la sesión se puede cifrar opcionalmente antes de colocarlo en el navegador. Para las sesiones de Apache (no necesariamente PHP) puede usar el módulo mod_session_crypto ( Lea más aquí ).

El propietario de la sesión no puede cambiar las variables de la sesión como le parece, a menos que la aplicación le permita hacerlo. La lógica de la aplicación debe proporcionar medios para cambiar la sesión para que el usuario pueda cambiar las variables.

El objeto de la sesión nunca se transmite al cliente y solo se pasa una referencia a la sesión (por ejemplo, PHPSESSID) al cliente. El ID de sesión debe tener una alta entropía y un mínimo de 16 bytes de longitud para que sea muy difícil de adivinar. Consulte Top 10 de OWASP: autenticación rota y administración de sesión para obtener más información al respecto. También vea esta hoja de referencia de OWASP para obtener información específica sobre cómo asegurar las sesiones.

Ataques contra el almacenamiento de sesión:

Si existe un error como, por ejemplo, LFI (Inclusión de archivos locales), es posible que un atacante lea sus propios objetos de sesión y los de otros usuarios al incluir el archivo en el sistema de archivos. Por ejemplo, si el siguiente ejemplo funcionó, posiblemente podría leer mis propios datos de sesión:

http://<victim>/?page=../../../../../../../../tmp/sess_<my sessionid>
    
respondido por el Chris Dale 22.08.2012 - 09:08
fuente
0

Revisa tu php.ini o usa info.php para encontrar el session.save_path

    
respondido por el Kris Roofe 27.12.2016 - 04:14
fuente

Lea otras preguntas en las etiquetas