This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org
Session Management Cheat Sheet Español
Este texto está en proceso de traducción. Para leer la versión completa (en inglés), pulse aquí.
Last revision (mm/dd/yy): 08/13/2015 Introducción al manejo de Sesiones
Una sesión Web es una secuencia de solicitudes de red HTTP y respuestas de transacción asociadas a un mismo usuario. Las aplicaciones Web modernas y complejas requieren mantener la información o el estado sobre cada usuario a lo largo de las múltiples solicitudes. Por lo tanto, las sesiones proporcionan una forma de establecer variables – como el derecho de acces y los ajustes de localización – que serán aplicadas a todas y cada una de las interacciones que el usuario tenga con la aplicación Web a lo largo de toda una sesión. Las aplicaciones web pueden crear sesiones para realizar un seguimiento de los usuarios anónimos después de la primera solicitud de éstos. Un ejemplo podría ser mantener la preferencia de idioma del usuario. Adicionalmente, las aplicaciones Web harán uso de las sesiones una vez que el usuario haya sido autentificado. Esto asegura la capacidad de identificar al usuario en cualquier solicitud posterior así como también, aplicar los controles de acceso de seguridad, el acceso autorizado a los datos privados del usuario e incrementar la usabilidad de la aplicación. Por lo tanto, las aplicaciones web actuales pueden proporcionar las capacidades de sesión, tanto pre como post autentificación. Una vez que una sesión autentificada ha sido establecida, el ID de sesión (o token) es temporalmente equivalente al método de autentificación más fuerte utilizado por la aplicación, tales como nombres de usuario y contraseña, frases de paso, contraseñas de un solo uso (OTP), certificados digitales basados en el cliente, tarjetas inteligentes o biometría (como las huellas dactilares o la retina del ojo). Ver la Guía de Referencias de OWASP sobre Autentificación.
Características del ID de SesiónPara mantener el estado autentificado y hacer un seguimiento del progreso del usuario dentro de la aplicación web, éstas deben proporcionar al usuario un identificador de sesión (ID de Sesión o token) que es asignado al momento de crear la sesión y es compartido e intercambiado entre el usuario y la aplicación Web durante toda la sesión (esto es enviado en cada solicitud HTTP). El ID de sesión se compone de un par "nombre=valor". Con el objetivo de implementar ID de sesión seguros, la generación de identificadores (IDs o tokens) debe reunir las siguientes características:
Huella digital del nombre del ID de SesiónEl nombre utilizado por el ID de sesión no debe ser muy descriptivo ni ofrecer detalles innecesarios sobre el propósito y el significado de éste. A los nombres de ID de sesión usados por los marcos de desarrollo más comunes, tales como PHPSESSID (PHP), JSESSIONID (J2EE), CFID & CFTOKEN (ColdFusion), ASP.NET_SessionId (ASP .NET), etc., se les puede obtener la huella digital fácilmente. Por lo tanto, el nombre del ID de sesión puede revelar las tecnologías y los lenguajes de programación utilizados por la aplicación web. Se recomienda cambiar el nombre de ID de sesión por defecto, a un nombre genérico como "id". Longitud del ID de sesiónEl ID de sesión debe ser lo suficientemente largo para evitar ataques de fuerza bruta, en los que un atacante puede recorrer un rango de valores de ID y verificar la existencia de sesiones válidas. La longitud del ID de sesión debe ser de al menos 128 bit (16 bytes).
Entropía del ID de SesiónEl ID de sesión debe ser impredecible (lo suficientemente aleatorio) para prevenir ataques que intenten adivinarlos, en los que donde un atacante es capaz de adivinar o predecir el ID de una sesión válida a través de técnicas de análisis estadístico. Para este propósito, un buen Generador de Números Pseudo Aleatorios (PRNG, siglas en inglés de Pseudo Random Number Generator) debe ser usado. El valor del ID de sesión debe proporcionar al menos 64 bits de entropía (si un buen PRNG es usado, este valor se estima es la mitad de la longitud del ID de sesión).
Contenido (o valor) del ID de sesiónEl contenido (o valor) del ID de sesión debe carecer de sentido a fin de prevenir ataques de divulgación de información, en los que un atacante es capaz de decodificar el contenido del ID, extraer detalles del usuario, la sesión o del funcionamiento interno de la aplicación web. El ID de sesión debe ser, simplemente, un identificador en el lado del cliente y su valor no debe incluir información sensible (o PII). El significado y la lógica de negocios o de la aplicación asociada al ID de sesión, debe ser almacenada del lado del servido y, específicamente, en objetos de sesión o en una base de datos de gestión de sesiones o repositorio. La información almacenada puede incluir la dirección IP del cliente, el User-Agent, e-mail, nombre de usuario, ID de usuario, rol, nivel de privilegio, derechos de acceso, preferencia de idioma, ID de cuenta, estado actual, último inicio de sesión, tiempos de espera de la sesión y otros detalles internos de la sesión. Si los objetos de sesión y propiedades contienen información sensible, como números de tarjeta de crédito, es requerido cifrar y proteger debidamente el repositorio de manejo de sesiones.
Autores y Editores PrincipalesRaul Siles (DinoSec) - raul[at]dinosec.com
Eugenia Bahit |