Prácticas recomendadas de seguridad de sesiones
Evite la fijación y el secuestro de sesiones mediante regeneración y flags.
Prácticas recomendadas de seguridad de sesiones es una lección gratuita de PHP Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de PHP Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de PHP Academy incluye 4 lecciones en total.
Ataque de fijación de sesión
Un atacante engaña a un usuario para que utilice un ID de sesión que el atacante ya conoce y, después, secuestra la sesión tras el inicio de sesión.
Evitar la fijación: session_regenerate_id()
Después de cualquier cambio de privilegios (inicio de sesión, cambio de rol), genere un nuevo ID de sesión conservando los datos existentes de la sesión.
<?php
session_start();
// After successful login:
session_regenerate_id(true); // true = delete old session file
$_SESSION["user_id"] = $userId;Secuestro de sesión
Un atacante roba el ID de sesión mediante la captura de tráfico de red, XSS o filtraciones en registros. Mitíguelo usando HTTPS, cookies HttpOnly y huellas digitales.
session.cookie_httponly
Impida que JavaScript lea la cookie de sesión; así se detiene la mayoría de los robos de sesión basados en XSS.
<?php
ini_set("session.cookie_httponly", 1);
session_start();session.cookie_secure
Marque la cookie de sesión como Secure para que solo se envíe mediante HTTPS.
<?php
ini_set("session.cookie_secure", 1);
session_start();session.cookie_samesite
Establezca SameSite en Strict o Lax para evitar ataques CSRF que utilicen la cookie de sesión.
<?php
ini_set("session.cookie_samesite", "Strict");
session_start();Vinculación del User-Agent
Guarde el User-Agent en la sesión al iniciar sesión y verifíquelo en cada solicitud para detectar secuestros.
<?php
if (!isset($_SESSION["ua"])) {
$_SESSION["ua"] = $_SERVER["HTTP_USER_AGENT"];
} elseif ($_SESSION["ua"] !== $_SERVER["HTTP_USER_AGENT"]) {
session_destroy();
die("Session invalid");
}Tiempo de expiración de la sesión
Implemente tiempos de expiración basados en la actividad; cierre automáticamente la sesión de los usuarios inactivos.
<?php
$timeout = 1800;
if (isset($_SESSION["last_active"]) &&
time() - $_SESSION["last_active"] > $timeout) {
session_destroy();
header("Location: /login");
exit;
}
$_SESSION["last_active"] = time();session.use_strict_mode
Active el modo estricto para que el servidor rechace los ID de sesión no reconocidos; así evitará la fijación de sesión mediante la inyección en URL.
<?php
ini_set("session.use_strict_mode", 1);
session_start();Controladores de sesión personalizados
Almacenar las sesiones en Redis o en una base de datos permite invalidar de forma centralizada todas las sesiones de un usuario y supervisar las sesiones activas.
Regeneración periódica
Incluso durante una sesión autenticada prolongada, regenere el ID de sesión cada 15-30 minutos para reducir el riesgo de robo del token.
Resumen
Siempre: use HTTPS, establezca los indicadores HttpOnly+Secure+SameSite, llame a session_regenerate_id(true) después de iniciar sesión, implemente tiempos de expiración por inactividad y use el modo estricto.
Comprobación rápida
¿Qué hace session_regenerate_id(true)?
Preguntas frecuentes
¿La lección «Prácticas recomendadas de seguridad de sesiones» es gratis?
Sí — el texto completo de «Prácticas recomendadas de seguridad de sesiones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de PHP Academy, actualiza a CoddyKit PRO. El curso de PHP Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Prácticas recomendadas de seguridad de sesiones»?
Evite la fijación y el secuestro de sesiones mediante regeneración y flags. Practicas PHP Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar PHP Academy?
No se requiere experiencia previa. PHP Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Prácticas recomendadas de seguridad de sesiones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de PHP Academy?
Sí. Cada lección de PHP Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Inicio y uso de sesiones
- Prácticas recomendadas de seguridad de sesiones
- Configuración y lectura de cookies
- Seguridad de cookies: flags HttpOnly y Secure