Manejo de sesiones en Drupal

RECU-0594 (Recurso Referencia)

Descripción

Drupal modifica el manejo de las sesiones que realiza PHP. A continuación se van a ofrecer una serie de indicaciones para manejar las sesiones dentro de sistemas desarrollados en Drupal

Buenas prácticas y recomendaciones de uso

Cambiar el tiempo de la expiración de las cookies

Es recomendable destruir la cookie cuando un usuario cierra el navegador.

La longitud del tiempo de expiración de que la cookie que contiene el identificador de sesión es controlado por session.cookie_lifetime dentro del archivo de configuración settings.php. Por defecto tienen un valor muy elevado, es recomendable situarlo a 0 que permite destruir la cookie cuando el usuario cierra el navegador.

Cambiar el nombre de la sesión

Es recomendable generar nombre de sesiones diferentes para cada subdominio.

Un problema común con las sesiones se presenta cuando se realiza un despliegue de sitios web en varios subdominios. Debido a que cada sitio utiliza el valor por defecto, igual session.cookie_domain y el mismo session.name de PHPSESSID por defecto,los usuarios se ven capaces de entrar en un solo sitio en un momento dado. Drupal soluciona este problema mediante la creación de un nombre de sesión único para cada sitio. El nombre de la sesión se basa en un hash MD5, con algunas modificaciones, de la dirección URL base para el sitio.

La generación automática del nombre de la sesión puede ser evitada eliminando el comentario de una línea en settings.php y especificando el valor de la variable $ cookie_domain. El valor debe contener sólo caracteres alfanuméricos. Aquí está la sección correspondiente del settings.php:

/**
* Drupal automatically generates a unique session cookie name for each site
* based on on its full domain name. If you have multiple domains pointing at
* the same Drupal site, you can either redirect them all to a single domain
* (see comment in .htaccess), or uncomment the line below and specify their
* shared base domain. Doing so assures that users remain logged in as they
* cross between your various domains.
*/
# $cookie_domain = 'example.com';

Almacenar datos en la sesión

La variable $user no debe ser utilizado para almacenar información para los usuarios anónimos.

El almacenamiento de datos en la sesión de un usuario es conveniente, porque los datos se almacenan automáticamente por el sistema de sesiones. Cada vez que desee almacenar los datos que desea asociar a un usuario durante una visita (o varias visitas hasta session.cookie_lifetime), utiliza $_SESSION

Si conoces el uid del usuario y se desea conservar algunos datos sobre el usuario, por lo general más práctico para almacenarlo en el objeto de usuario $user como un atributo único como foo $ usuario-> = $ bar llamando al user_save($ usuario, array ('nombre' => $ cadena)), que serializa los datos a los usuarios a la columna de la tabla de datos .

Si la información es transitorio y no le importa si se pierde, o si usted necesita almacenar datos a corto plazo para los usuarios anónimos,puede almacenarlo en la sesión. Si desea vincular una preferencia permanente a la identidad de un usuario, almacénelo en el objeto de usuario $user.

Requerir cookies

El navegador debe aceptar cookies para poder establecer la sesión.

Si el navegador no acepta cookies, no puede establecerse una sesión debido a que la directiva PHP, sessions_use_only_cookies, se ha establecido en 1 y la alternativa (pasando el PHPSESSID en la cadena de consulta de la URL) se ha desactivado mediante la creación sessions.use_trans_sid a 0. Esta es una buena práctica, según lo recomendado por el framework Zend

La gestión de la sesión basada en URL añade riesgos de seguridad adicionales en comparación con los sistemas de gestión basados en cookies. Los usuarios pueden enviar una dirección URL que contiene un identificador de sesión activa a sus amigos por correo electrónico o los usuarios pueden guardar una dirección URL que contiene un identificador de sesión a sus favoritos y acceder a su sitio con el mismo identificador de sesión siempre, por ejemplo, con los riesgos que esto conlleva.

Para disuadir a los secuestros de sesión, el identificador de sesión se debe de regenerar cuando un usuario inicia sesión.

 



Contenidos relacionados

Pautas
Área: Desarrollo » Seguridad » Gestión de Sesiones y Usuarios
Código Título Tipo Carácter
LIBP-0311 Gestión de la sesión Libro de pautas Directriz Obligatoria