Seguridad de Cookies
Sistema de cookies seguras con HttpOnly, SameSite y dominio restringido.
Problema Identificado
Síntoma: Al abrir un navegador privado/incógnito, el usuario aparecía logueado automáticamente.
Causa Raíz: Las cookies HttpOnly se estaban configurando con domain=None, lo que las hacía aplicables a todos los dominios en lugar de estar restringidas al dominio específico.
Configuración Corregida
Cookies de Login
response.set_cookie(
key="refresh_token",
value=refresh_token,
httponly=True,
secure=True, # HTTPS en producción
samesite="strict", # Máximo aislamiento
max_age=settings.JWT_REFRESH_EXPIRE_DAYS * 24 * 60 * 60,
path="/",
domain="localhost" # Restringido al dominio
)
Sistema de session_id
Cada sesión tiene un session_id único que se valida en todas las peticiones para prevenir fuga de sesiones entre ventanas privadas.
Implicaciones de Seguridad
Antes (Inseguro)
- ❌ Cookies aplicables a todos los dominios
- ❌ Persistencia entre sesiones de navegador privado
- ❌ Posible fuga de sesiones entre aplicaciones
Después (Seguro)
- ✅ Cookies restringidas al dominio específico
- ✅ No persistencia entre sesiones de navegador privado
- ✅ Aislamiento correcto de sesiones
- ✅ Sistema de
session_idúnico por ventana
Configuración por Entorno
Desarrollo
domain="localhost"secure=Falsesamesite="lax"
Producción
domain=".tu-dominio.com"(o sin dominio para restricción estricta)secure=True(requiere HTTPS)samesite="strict"