Buenas prácticas de seguridad de las APIs
En esta Página
Autenticación
- Evite la “autenticación básica”, utilice lo estándar (por ejemplo, JWT)
- No reinvente la rueda en los mecanismos de autenticación.
- Utilizar las funciones “Max Retry” y jail en Login
- Cifrar todos los datos sensibles
JWT
- Utilice un buen “JWT Secret” para dificultar los ataques de fuerza bruta
- No extraer el algoritmo de la cabecera, utilize el backend
- Haga que la caducidad de los tokens (TTL, RTTL) sea lo más corta posible
- Evitar el almacenamiento de datos sensibles en la carga JWT
- Mantenga la carga útil pequeña para reducir el tamaño del token JWT
Control de acceso
- Limitar solicitudes (throttling) para evitar DDoS/Fuerza Bruta
- Utilice HTTPS en el lado del servidor y cifrados seguros
- Utilice el encabezado HSTS con SSL para evitar ataques SSL Strip
- Desactivar listados de directorios
- Las API privadas solo serán accesibles desde direcciones IP seguras
OAuth
- Valide siempre “redirect_uri” en el lado del servidor
- Evite “response_type=token” e intente cambiarlo por código
- Utilice el parámetro “state” para evitar ataques CSRF
- Tener scope predeterminado y validar scope para cada aplicación
Procesamiento
- Compruebe si todos los endpoints están protegidos mediante autenticación para evitar un proceso de autenticación interrumpido
- Evite la identificación personal del usuario en las URL de recursos, ej. usuarios/242/pedidos
- Prefiera usar UUID en lugar de ID autoincremental
- Deshabilite entity parsing si está usando parsing XML para evitar ataques XXE
- Deshabilite entity expansion si usa XML, YML o cualquier otro idioma
- Utilice CDN para cargar archivos
- Evite el HTTP blocking si utiliza una gran cantidad de datos
- Asegúrese de desactivar el modo de depuración en producción
- Utilice pilas no ejecutables cuando estén disponibles
Entrada
- Utilice métodos HTTP adecuados para la operación
- Validar “content-type” en el encabezado de la solicitud
- Validar la entrada del usuario para evitar vulnerabilidades comunes
- Utilice el encabezado de Authorization estándar para datos confidenciales
- Utilice únicamente cifrado del lado del servidor
- Utilice una API Gateway para almacenamiento en caché, políticas de límite de velocidad, etc
Salida
- Enviar encabezado “X-Content-Type-Options: nosniff”
- Enviar encabezado “X-Frame-Options: deny”
- Enviar encabezado “Content-Security-Policy: default-src ‘none’ ”
- Eliminar encabezados de huellas digitales (es decir, x-powered-by, etc.)
- Forzar “content-type” para su respuesta
- Evite devolver datos confidenciales (credenciales, tokens, etc.)
- Devolver códigos de respuesta adecuados según la operación
CI & CD
- Audite su diseño e implementación con pruebas unitarias/integración
- Utilice un proceso de revisión de código y no use la autoaprobación.
- Ejecute continuamente análisis de seguridad en su código
- Verifique sus dependencias para detectar vulnerabilidades conocidas
- Diseñar una solución rollback para implementaciones
Monitorizacion
- Utilice inicios de sesión centralizados para todos los servicios y componentes
- Utilice agents para monitorear todos los requests, responses y errores.
- Utilice alertas para SMS, Slack, correo electrónico, Kibana, Cloudwatch, etc.
- Asegúrese de no registrar ningún dato confidencial
- Utilice un sistema IDS y/o IPS para monitorear todo