Gestión de la sesión
- Área: Gestión de Sesiones y Usuarios
- Tipo de pauta: Directriz
- Carácter de la pauta: Obligatoria
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ítulo | Carácter |
---|---|
Identificadores de sesión en marcos de aplicación | Obligatoria |
Controles de fijación de sesión | Obligatoria |
Credenciales de sesión y credenciales de página | Obligatoria |
Manejo de información sensible | Obligatoria |
Almacenamiento de credenciales en URL | No Recomendada |
Datos de sesión no accesibles | Obligatoria |
Áreas de ficheros temporales | Obligatoria |
Almacenamiento de objetos no serializables en sesión | No Recomendada |
Autenticación de la sesión | Obligatoria |
Regeneración antes de cada transacción significativa | Recomendada |
Regeneración tras cierta cantidad de transacciones | Recomendada |
Regeneración tras un determinado tiempo | Recomendada |
Control del estado de autenticación y autorización | Obligatoria |
Uso de recursos | Obligatoria |
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.
Contenidos relacionados
Código | Título | Tipo | Carácter | |
---|---|---|---|---|
LIBP-0274 | Encriptación de la información sensible | Libro de pautas | Directriz | Obligatoria |
Código | Título | Tipo | Carácter |
---|---|---|---|
RECU-0588 | Almacenamiento de objetos no serializables en HttpSession | Ejemplo | Obligatorio |
RECU-0589 | Configuración de la carpeta donde se almacenan las sesiones | Ejemplo | Obligatorio |
RECU-0590 | Denegación al JavaScript del navegador del acceso a las cookies | Ejemplo | Recomendado |
RECU-0594 | Manejo de sesiones en Drupal | Referencia | Obligatorio |