English | 繁中版 | 简中版 | Português (Brasil) | Français | 한국어 | Nederlands | Indonesia | ไทย | Русский | Українська | Italiano | 日本語 | Deutsch | Türkçe | Tiếng Việt | Монгол | हिंदी | العربية | Polski | Македонски | ລາວ | فارسی
Lista de las contramedidas de seguridad más importantes en cuanto al diseño, testing y publicación de tu API.
- No uses
Basic AuthUsa 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. - Usa encriptación en toda la información que sea sensible.
- 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 (
HS256oRS256). - 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.
- 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.
- 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.
- 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, orAPI keys) en la URL, en su lugar usa la cabecera estándarAuthorization. - 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 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 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.
- 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. - 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.
- Diseña un proceso de
rollbackpara tusdeploys.
- yosriady/api-development-tools - Una colección de recursos útiles para la creación de APIs RESTful HTTP+JSON.
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.