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/loginyPOST /api/auth/register. El resto de la API no está limitado.Configuración:
app/__init__.py(limiter) yapp/routes.py(decorador@limiter.limit("3 per minute")en ambas rutas). Deshabilitado en tests conAPP_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 opcionalmenteRECAPTCHA_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.