Gestión de la sesión

LIBP-0311 (Libro de pautas)

Se recomienda seguir las siguientes indicaciones a la hora de gestionar las sesiones

Dado que las sesiones vinculan a un usuario durante el uso de un sitio Web, es importante gestionar éstas de manera segura, para garantizar que un usuario malintencionado no pueda apoderarse de ellas

Pautas

TítuloCarácter
Identificadores de sesión en marcos de aplicaciónObligatoria
Controles de fijación de sesiónObligatoria
Credenciales de sesión y credenciales de página Obligatoria
Manejo de información sensible Obligatoria
Almacenamiento de credenciales en URLNo Recomendada
Datos de sesión no accesiblesObligatoria
Áreas de ficheros temporalesObligatoria
Almacenamiento de objetos no serializables en sesiónNo Recomendada
Autenticación de la sesión Obligatoria
Regeneración antes de cada transacción significativaRecomendada
Regeneración tras cierta cantidad de transaccionesRecomendada
Regeneración tras un determinado tiempoRecomendada
Control del estado de autenticación y autorizaciónObligatoria
Uso de recursosObligatoria

Identificadores de sesión en marcos de aplicación

Obtener a través de la cookie el valor de los identificadores de sesión en los marcos de aplicación

Asegurar que los identificadores de sesión en los marcos de aplicación sólo puedan ser obtenidos a través del valor de la cookie.

Esto puede requerir cambiar el comportamiento habitual del marco de aplicaciones o sobrescribir el manejador de sesiones.

Controles de fijación de sesión

Utilizar controles de fijación de sesión

Para evitar que se produzcan ataques de fijación de sesión es necesario invalidar el identificador de sesión existente antes de autenticar a un nuevo usuario.

Si se le asigna el mismo identificador de otra sesión conocida, un atacante podría usar esta sesión para acceder a la cuenta del usuario que se ha logado anteriormente.

Credenciales de sesión y credenciales de página

Utilizar credenciales de página para las operaciones críticas

Utilizar credenciales de página a la hora de ejecutar transacciones críticas, para dificultar los ataques de CSRF.

Consiste en trabajar, además de con la credencial de sesión, con una credencial de página que se crea por el servidor de forma aleatoria cuando ésta se carga y deja de ser válida cuando se envía, de manera que la credencial está disponible por un tiempo limitado (inferior al de la credencial de sesión), haciendo más difícil falsificar las credenciales a un posible usuario mal intencionado para efectuar un ataque.

Manejo de información sensible

Utilizar sesiones para almacenar los datos críticos

Las cookies son fácilmente modificables por los usuarios. Es recomendable no almacenar información crítica en cookies ya que pueden ser falsificadas usando programas automatizados.

Es preferible utilizar sesiones para almacenar los datos importantes. Generalmente, se almacenará un ID de sesión en la cookie del usuario. Los datos asociados residen en el servidor (archivos o base de datos).

Almacenamiento de credenciales en URL

Evitar guardar las credenciales de sesión en una URL.

No guarde credenciales de sesión en una URL u otro método trivial de almacenaje

Datos de sesión no accesibles

Controlar que los datos de sesión no sean accesibles

En la medida de lo posible validar que los datos de sesión, si están almacenados en disco, no sean accesibles por otros usuarios, otras aplicaciones desplegadas en el mismo servidor o códigos maliciosos.

Áreas de ficheros temporales

Usar áreas de ficheros temporales por cliente / aplicación.

Confirmar que el servidor de aplicaciones esté configurado para usar áreas de ficheros temporales por cliente / aplicación. Si esto no es posible, los datos de sesión deben ser cifrados o contener sólo información no sensible.

Almacenamiento de objetos no serializables en sesión

No almacenar objetos no serializables en la sesión

Es necesario que todos los objetos que se almacenen en la sesión sean serializables, ya que, de lo contrario, no podrán ser codificados ni transportados por la red.

La serialización consiste en un proceso de codificación de un objeto en un medio de almacenamiento (como puede ser un archivo, o un buffer de memoria) con el fin de transmitirlo a través de una conexión en red como una serie de bytes o en un formato humanamente más legible como XML o JSON, entre otros.

Autenticación de la sesión

Controlar la autenticación del usuario en los momentos previos a la ejecución de cualquier acción comprometida.

Hay que comprobar que el usuario conectado tenga la autorización necesaria para acceder, actualizar o eliminar información antes de ejecutar la acción, deteniendo la misma si la comprobación resultase negativa.

Las variables de sesión deben ser validadas para asegurar que tienen el formato adecuado, no contienen caracteres inesperados, y que son válidas en la tabla de sesiones activas

Regeneración antes de cada transacción significativa

Realizar una regeneración de las credenciales antes de cada transacción significativa.

Debemos regenerar las credenciales antes de cada transacción significativa para evitar el secuestro de la sesión o, en caso de que la sesión haya sido secuestrada, evitar que dicho ataque pueda ser efectivo ante una transacción.

Regeneración tras cierta cantidad de transacciones

Realizar una regeneración de las credenciales después de un número significativo de transacciones.

Debemos regenerar las credenciales después de cierta cantidad de transacciones para acortar la ventana de oportunidades para ataques

Regeneración tras un determinado tiempo

Regenerar las credenciales al cabo de un tiempo determinado.

La regeneración de las credenciales al cabo de un tiempo impide que, en caso de un ataque de fuerza bruta o un secuestro de credenciales, puedan acceder a la aplicación por tiempo ilimitado ya que dichas credenciales dejarán de ser válidas después de un tiempo determinado.

Control del estado de autenticación y autorización

Comprobar que cada página protegida controla la autenticación y la autorización.

Asegúrese que cada página protegida o acción controle el estado de autenticación y autorización antes de realizar cualquier cantidad significativa de trabajo, incluyendo la generación de contenido.

Uso de recursos

Utilizar la menor cantidad de recursos.

Asegúrese que todas las páginas desprotegidas utilicen la menor cantidad de recursos para prevenir un ataque de negación de servicio, y no facilite la fuga de información de la parte protegida de la aplicación.