Autenticación
- No uses Basic Auth Usa autenticación estándar (e.g. JWT, OAuth).
- No reinventes la rueda en autenticación, generación de tokens, almacenamiento de contraseñas. Usa los estándares.
- Usa políticas de límite de reintentos (Max Retry) y funcionalidades de jailing en el Login.
- Cifra toda la información que sea sensible.
JWT (JSON Web Token)
- Usa claves aleatorias complejas (JWT Secret) para dificultar los ataques por fuerza bruta.
- No extraigas el algoritmo del contenido. Fuerza el algoritmo en el backend (HS256 o RS256).
- Haz que la expiración del token (TTL, RTTL) sea tan corta como sea posible.
- No almacenes información sensible en el contenido del JWT, puede ser descodificado fácilmente.
OAuth
- Siempre valida redirect_uri en el lado del servidor para permitir sólo ciertas URLs.
- Trata siempre de intercambiar código y no tokens (no permitas response_type=token).
- Usa el parámetro state con un hash aleatorio para prevenir CSRF en el proceso de autenticación OAuth.
- Define el ámbito (scope) por defecto, y valida los parámetros de ámbito para cada aplicación.
Acceso
- Limita las peticiones (Throttling) para prevenir ataques DDoS y de fuerza bruta.
- Usa HTTPS en el lado del servidor para evitar ataques MITM (Man In The Middle Attack).
- Usa la cabecera HSTS con SSL para evitar SSL Strip attack.
Entradas
- Usa el método HTTP apropiado a cada operación: GET (lectura), POST (creación), PUT/PATCH (reemplazo/actualización), y DELETE (borrado), y responde con 405 Method Not Allowed si el método en la petición no es apropiado para el recurso.
- Valida el content-type en la cabecera Accept de las peticiones (Content Negotiation), para permitir sólo los formatos soportados (e.g. application/xml, application/json, etc) y responde con 406 Not Acceptable si no hay coincidencias.
- Valida el content-type de información enviada en base a la que aceptes (e.g. application/x-www-form-urlencoded, multipart/form-data, application/json, etc).
- Valida las entradas que realizan los usuarios para evitar ataques comunes (e.g. XSS, SQL-Injection, Remote Code Execution, etc).
- No utilices información sensible (credentials, Passwords, security tokens, or API keys) en la URL, en su lugar usa la cabecera estándar Authorization.
- Usa un servicio de API Gateway para permitir almacenamiento en caché (caching), límite de peticiones (Rate Limit), Spike Arrest y el despliegue de APIs dinámicamente.
Procesamiento
- Valida que todos los endpoints estén protegidos con autenticación para evitar romper el proceso de autenticación.
- Debes evitar los recursos bajo un ID de usuario. Usa /me/orders en lugar de /user/654321/orders.
- No uses IDs auto incrementales. Usa UUID en su lugar.
- Si estas procesando archivos XML, asegúrate de deshabilitar el procesamiento de entidades para evitar ataques XXE (XML external entity attack).
- Si estas procesando archivos XML, asegúrate de deshabilitar la expansión de entidades, para evitar un ataque Billion Laughs/XML bomb via expansión exponencial de entidades.
- Utiliza CDN para subidas de ficheros.
- Si lidias con grandes cantidades de información, utiliza Workers y Colas para procesar tanto cómo sea posible en segundo plano, y devuelve una respuesta rápido para evitar un bloqueo HTTP.
- No olvides deshabilitar el modo Debug.
Salidas
- Envía la cabecera X-Content-Type-Options: nosniff.
- Envía la cabecera X-Frame-Options: deny.
- Envía la cabecera Content-Security-Policy: default-src ‘none’.
- Elimina cabeceras que dejen huellas – X-Powered-By, Server, X-AspNet-Version etc.
- Fuerza content-type para tus respuestas, si devuelves un json entonces tu content-type es application/json.
- No devuelvas información sensible cómo credenciales, contraseñas, tokens de seguridad.
- Devuelve el código HTTP acorde a la operación completada. (e.g. 200 OK, 400 Bad Request, 401 Unauthorized, 405 Method Not Allowed, etc).
CI & CD
- Audita tu diseño e implementación con tests unitarios/integración y test coverage.
- Usa procesos de revisión de código y evita la auto aprobación.
- Asegura que todos los componentes de tus servicios se escanean estáticamente con un software AV antes de ir a producción, incluyendo librerías de terceros y dependencias.
- Diseña un proceso de rollback para tus deploys.
Sé el primero en comentar