Rate limiting y configuración centralizada

Protección contra fuerza bruta

  • Rate limiting: Flask-Limiter.

  • Límite: 3 peticiones por IP por minuto solo en POST /api/auth/login y POST /api/auth/register. El resto de la API no está limitado.

  • Configuración: app/__init__.py (limiter) y app/routes.py (decorador @limiter.limit("3 per minute") en ambas rutas). Deshabilitado en tests con APP_TESTING=1.

Configuración de seguridad en app/config.py

  • SESSION_CONFIG: Cookies de sesión (HttpOnly, Secure, SameSite).

  • HSTS_CONFIG: HSTS (max-age, includeSubDomains, preload).

  • PASSWORD_HASH_CONFIG: Parámetros de Argon2id (time_cost, memory_cost, parallelism, hash_len, salt_len). Los hashes se migran al nuevo coste en el siguiente login (ver Autenticación y contraseñas).

  • AUTH_CONFIG: Límites de longitud de username y password.

  • reCAPTCHA v3: RECAPTCHA_SITE_KEY, RECAPTCHA_SECRET_KEY, RECAPTCHA_MIN_SCORE (y opcionalmente RECAPTCHA_VERIFY_URL). Se leen desde variables de entorno (.env). Especificación completa en Autenticación y contraseñas.

Esta centralización facilita la gestión y auditoría de las políticas de seguridad.

WAF (ModSecurity + OWASP CRS)

Además del rate limiting a nivel de aplicación, todo el tráfico HTTP pasa por un WAF con ModSecurity y el OWASP Core Rule Set. Configuración detallada en WAF: ModSecurity + OWASP CRS.

← Índice de seguridad