Saltar al contenido
>_ITDITDPlataforma de seguridad web

Glosario

Qué es la fijación de sesión: hacer que una víctima inicie sesión con un ID que el atacante ya conoce

La fijación de sesión hace que una víctima use un ID de sesión que el atacante plantó, y luego la suplanta una vez que inicia sesión con él. Cómo funciona y la defensa real: regenerar el ID de sesión al iniciar sesión, no aceptar nunca un ID desde la URL, fijar las marcas de la cookie, explicado en clave defensiva.

Publicado 2026-06-11 Actualizado 2026-06-11 3 min de lectura

«La víctima inicia sesión con un ID que el atacante preparó»: eso es la fijación de sesión. Aquí tienes cómo funciona y cómo prevenirla de forma fiable (sin pasos de ataque).

Por qué funciona

El meollo es un diseño donde el ID de sesión no cambia al iniciar sesión. Si no cambia, un ID que el atacante conocía antes del inicio de sesión sigue funcionando como «autenticado» después del inicio de sesión.

1) El atacante consigue que la víctima use un ID de sesión conocido (vía un enlace, etc.)
↓ la víctima inicia sesión con ese ID aún fijado
2) El ID no se regenera = el mismo ID queda «autenticado»
↓ el atacante conocía ese ID todo el tiempo
3) Acceder con el mismo ID = suplantar a la víctima
Si el ID no cambia al iniciar sesión, un ID que el atacante conocía de antemano queda autenticado tal cual.

Puede combinarse con CSRF o XSS, pero la esencia de la fijación en sí es una sola cosa: el ID no se regeneró al iniciar sesión.

Defensa: regenera el ID al iniciar sesión

1

Regenera el ID de sesión al iniciar sesión con éxito (lo más importante)

En el instante en que la autenticación tiene éxito, descarta el ID antiguo y emite un nuevo ID de sesión (el session regenerate/renew de la mayoría de los frameworks). Cualquier ID plantado de antemano queda invalidado de inmediato. Regenera también en la escalada de privilegios (por ejemplo, al convertirse en administrador).
2

No aceptes IDs de sesión por la URL

Maneja el ID de sesión en una cookie e ignora un ID especificado en un parámetro de URL. Cierra la vía que un atacante usa para hacer que una víctima adopte un ID 'fijado'.
3

Refuerza las marcas de la cookie

Configura las cookies de sesión con HttpOnly (JS no puede leerlas), Secure (solo HTTPS) y SameSite (frena el envío entre sitios). Debilita en conjunto las vías de secuestro relacionadas.
4

Caduca las sesiones con criterio

Caduca por inactividad, cierre de sesión y cambio de contraseña para que un ID fijado no pueda perdurar indefinidamente.

La visión de este sitio: no desactives el 'regenerate' del framework

La fijación de sesión se cierra en gran medida con un solo movimiento —regenerar el ID al iniciar sesión—, no con código personalizado elaborado. La clave es no desactivar por accidente ni olvidarse de llamar al mecanismo que tu framework ya proporciona. Aprovechar los valores predeterminados seguros de una implementación probada supera a montar tu propia gestión de sesiones a mano. En este sitio nos atenemos a «no construyas tú mismo la autenticación/gestión de claves; no desactives los valores predeterminados seguros». Como con el IDOR, la autenticación/autorización debe imponerse mediante un mecanismo en cada solicitud.

Sigue leyendo

FAQ

Q¿En qué se diferencia la fijación del secuestro de sesión?
A

El secuestro roba un ID de sesión ya emitido a alguien. La fijación es lo contrario: el atacante consigue que la víctima use un ID que el atacante ya conoce, y luego espera a que la víctima inicie sesión con él. No roba: consigue que un ID conocido por el atacante quede autenticado.

Q¿Cuál es la mejor defensa?
A

Regenerar el ID de sesión en el momento del inicio de sesión. La mayoría de los frameworks/librerías de sesión tienen esto (session regenerate/renew): al autenticarse con éxito, descarta el ID antiguo y emite uno nuevo. Eso por sí solo invalida cualquier ID que el atacante plantara de antemano. Regenera también en los cambios de privilegios (por ejemplo, al convertirse en administrador).

Q¿Por qué es peligroso poner un ID de sesión en la URL?
A

Un ID en la URL se filtra con facilidad mediante enlaces compartidos, la cabecera Referer, los registros y el historial del navegador: una forma de que un atacante haga que la víctima use un ID 'fijado'. Maneja los IDs de sesión en cookies, no en parámetros de URL, y no aceptes un ID especificado mediante la URL.