English | 繁中版 | 简中版 | العربية | Azərbaycan | Български | বাংলা | Català | Čeština | Deutsch | Ελληνικά | فارسی | Français | हिंदी | Indonesia | Italiano | 日本語 | 한국어 | ພາສາລາວ | Македонски | മലയാളം | Монгол | Nederlands | Polski | Português (Brasil) | Русский | ไทย | Türkçe | Українська | Tiếng Việt
Lista de las contramedidas de seguridad más importantes en cuanto al diseño, testing y publicación de tu API.
- No usa
Basic Auth. Usa la autenticación estándar en su lugar. - 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. - Usa encriptación en toda la información que sea sensible.
- 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
HSTScon SSL para evitar SSL Strip attack. - Desactive las listados de directorios.
- Para las API privadas, permita el acceso solo desde hosts/IP incluidos en la lista blanca.
- Siempre valida
redirect_urien 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
statecon 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.
- Usa el método HTTP apropiado a cada operación:
GET (lectura),POST (creación),PUT/PATCH (reemplazo/actualización), yDELETE (borrado), y responde con405 Method Not Allowedsi el método en la petición no es apropiado para el recurso. - Valida el
content-typeen la cabeceraAcceptde las peticiones (Content Negotiation), para permitir sólo los formatos soportados (e.g.application/xml,application/json, etc) y responde con406 Not Acceptablesi no hay coincidencias. - Valida el
content-typede 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, oAPI keys) en la URL, en su lugar usa la cabecera estándarAuthorization. - Use solo cifrado del lado del servidor.
- 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.
- 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/ordersen lugar de/user/654321/orders. - No uses IDs auto incrementales. Usa
UUIDen su lugar. - Si estas procesando XML, asegúrate de deshabilitar el procesamiento de entidades para evitar ataques
XXE(XML external entity attack). - Si estas procesando XML, YAML o algún otro lenguaje con soporte para anchors y referencias, asegúrate de deshabilitar la expansión de entidades, para evitar un ataque
Billion Laughs/XML bombvia 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.
- Utilice stacks no ejecutables cuando estén disponibles.
- 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-Versionetc. - Fuerza
content-typepara tus respuestas, si devuelves unjsonentonces tucontent-typeesapplication/json. - Do not return overly specific error messages to the client that could reveal implementation details, use generic messages instead, and log detailed information only on the server side.
- 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).
- 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.
- Ejecute continuamente pruebas de seguridad (análisis estático/dinámico) en su código.
- Verifique sus dependencias (tanto software como sistema operativo) en busca de vulnerabilidades conocidas.
- Diseña un proceso de
rollbackpara tusdeploys.
- Usa logins centralizados para todos los servicios y componentes.
- Usa agentes para monitorear todo el tráfico, errores, solicitudes, y respuestas.
- Usa alertas para SMS, Slack, Email, Telegram, Kibana, Cloudwatch, etc.
- Asegúrese de no registrar datos confidenciales, como tarjetas de crédito, contraseñas, PIN, etc.
- Use un sistema IDS y/o IPS para monitorear las solicitudes e instancias de su API.
- yosriady/api-development-tools - Una colección de recursos útiles para la creación de APIs RESTful HTTP+JSON.
- You don't need JWT, just use a randomly generated API key. If you need asymmetric encryption or tamper prevention, here are some alternatives to JWT.
- Implement sliding window rate limiting per API key and IP.
- Use exponential backoff for repeated failed authentication attempts.
- Implement CAPTCHA or proof-of-work challenges after suspicious activity.
- Monitor and alert on unusual API usage patterns (time, volume, endpoints).
- Disable introspection in production environments.
- Implement query depth limiting to prevent nested query attacks.
- Use query cost analysis to prevent resource exhaustion.
- Whitelist allowed queries in production when possible.
- Rotate API keys and secrets on a regular schedule.
- Use hardware security modules (HSM) for signing operations.
- Implement secret scanning in CI/CD pipelines.
- Never commit secrets to version control - use environment variables or secret managers.
- Implement mutual TLS (mTLS) for service-to-service communication.
- Validate all requests even from internal services.
- Use short-lived tokens with automatic refresh.
- Implement request signing for sensitive operations.
Siéntete libre de contribuir haciendo un fork de éste repositorio, haciendo cambios, y enviando pull requests. Para cualquier pregunta déjanos un email en team@shieldfy.io.