How we protect your data
No system is perfect. These are the concrete measures we apply. Found a security issue? Email rensont@gmail.com before going public and we'll credit you.
Autenticación
Contraseñas hasheadas con bcrypt (algoritmo de hash adaptativo resistente a fuerza bruta) con un cost factor que se incrementa con el tiempo. Nunca vemos ni loggeamos tu contraseña en texto plano. Login por Google OAuth vía Supabase como alternativa. Mínimo 8 caracteres en contraseñas locales.
Sesiones
Cookies HttpOnly + SameSite=Lax. Firmadas con HMAC y rotadas. Expiran en 30 días por defecto. Logout cierra la sesión inmediatamente del lado servidor y borra la cookie del navegador.
Transporte
HTTPS forzado en todo el sitio vía Cloudflare. HSTS preload activo. TLS 1.2+. Sin HTTP descubierto a internet.
Headers de seguridad
Content-Security-Policy estricta (solo scripts propios + CDN whitelist). X-Frame-Options DENY (anti-clickjacking). X-Content-Type-Options nosniff. Referrer-Policy strict-origin-when-cross-origin. Permissions-Policy restrictiva.
Anti fuerza bruta
Rate limit global por IP (240 req/min) y específico para login/signup (12 intentos cada 5 min). Detección de patrones de scraping. Bans automáticos temporales en abuso.
Validación de input
Validación server-side en todos los endpoints. Whitelisting de paths permitidos. Escape de HTML en salidas. Sin ejecución dinámica de strings.
Auditoría de dependencias
pip-audit corre en cada deploy. Si aparece una CVE nueva, el deploy WARN/FAIL hasta que se resuelva. Stack mantenido al día.
Logs y monitoreo
Logs de acceso y errores en Railway (rotados). Telemetría de errores en Sentry (sin PII en stack traces). Monitor HTTP cada 5 min en UptimeRobot. Alertas por email en down/redeploy.
Backups
Volume de Railway respaldado diariamente a almacenamiento off-site. Retención 90 días. Restore probado periódicamente.
Acceso interno
Solo Renso (operador único) tiene acceso a datos de producción. Cuando sumemos personal, vamos a documentar acceso por rol y aplicar principio de mínimo privilegio.
Respuesta a incidentes
Si detectamos brecha que afecte datos personales: notificación a usuarios afectados en 72 horas (GDPR Art. 33). Reporte a autoridad cuando aplique (AAIP, autoridad UE, FTC). Post-mortem público en /changelog tras resolver.
Borrado seguro
Al eliminar cuenta: archivos del usuario borrados recursivamente, fila en users.json eliminada, suscripciones marcadas como deleted. Backups con la data rotan a los 90 días.