Audiencia
Esta guía es para cualquiera que necesite entender los fundamentos de seguridad de APIs:
- Desarrolladores backend construyendo APIs que manejan datos sensibles
- Desarrolladores frontend integrándose con APIs y manejando autenticación
- Ingenieros de seguridad revisando arquitecturas de APIs en busca de vulnerabilidades
- Ingenieros DevOps configurando API gateways y controles de seguridad
- Líderes técnicos tomando decisiones de seguridad para sus equipos
Se asume conocimiento básico de HTTP y APIs REST. Si necesitas un repaso, comienza con Cómo Funciona una API REST.
Objetivo
Después de leer esta guía, entenderás:
- Qué constituye la superficie de ataque de una API y dónde se esconden las vulnerabilidades
- Las 10 principales amenazas de seguridad de APIs según OWASP y cómo se manifiestan
- Cómo implementar validación de entrada para prevenir ataques de inyección
- Qué protege realmente CORS (y qué no protege)
- Por qué importa el rate limiting y cómo funciona conceptualmente
- Qué headers de seguridad debe implementar toda API
No te convertirás en un pentester, pero tendrás el conocimiento para construir APIs que resistan ataques comunes y pasen revisiones de seguridad.
1. Entendiendo la Superficie de Ataque de APIs
Toda API expone una superficie de ataque que los atacantes pueden explorar. Entender esta superficie es el primer paso para defenderla.
¿Qué es la Superficie de Ataque?
La superficie de ataque es la suma de todos los puntos donde un atacante puede intentar entrar o extraer datos de tu sistema. Para APIs, esto incluye:
graph TB
subgraph "Superficie de Ataque de API"
A[Endpoints] --> A1["/users, /orders, /admin"]
B[Datos] --> B1["Bodies, query params, headers"]
C[Autenticación] --> C1["Tokens, sesiones, API keys"]
D[Lógica de Negocio] --> D1["Workflows, máquinas de estado"]
E[Infraestructura] --> E1["Servidores, bases de datos, caché"]
end
style A fill:#ffcdd2
style B fill:#fff9c4
style C fill:#c8e6c9
style D fill:#bbdefb
style E fill:#e1bee7Las Tres Dimensiones del Riesgo en APIs
1. Endpoints (Lo que expones)
Cada endpoint que creas es un punto de entrada potencial. Considera:
- ¿Cuántos endpoints tiene tu API?
- ¿Hay endpoints ocultos o no documentados?
- ¿Tienes endpoints de debug o admin en producción?
2. Datos (Lo que fluye a través)
Los datos entran a tu API mediante:
- Cuerpos de petición (JSON, XML, form data)
- Parámetros de query (
?search=...&limit=...) - Parámetros de ruta (
/users/{id}) - Headers (Authorization, headers personalizados)
- Cookies
Cada canal de entrada es un vector potencial de inyección.
3. Autenticación/Autorización (Quién puede acceder a qué)
Los fallos de seguridad más comunes en APIs involucran:
- Autenticación rota (tokens débiles, validación faltante)
- Autorización rota (acceder a datos de otros usuarios)
- Exposición excesiva de datos (devolver más de lo necesario)
Ejemplo Real: La Superficie de Ataque de una API Bancaria
Considera una API bancaria simple:
POST /auth/login # Autenticación
POST /auth/refresh # Renovar token
GET /accounts # Listar cuentas del usuario
GET /accounts/{id} # Detalles de cuenta
POST /transfers # Crear transferencia
GET /transfers/{id} # Estado de transferencia
GET /statements/{year} # Extractos anualesAnálisis de superficie de ataque:
| Componente | Riesgo | Ejemplo de Ataque |
|---|---|---|
/auth/login | Credential stuffing, fuerza bruta | Probar millones de contraseñas |
/accounts/{id} | IDOR (Referencia Directa Insegura a Objetos) | Cambiar id para acceder a otras cuentas |
/transfers | Abuso de lógica de negocio | Montos negativos de transferencia |
| Query params | Inyección | ?year=2024; DROP TABLE accounts |
| Tokens JWT | Falsificación de token, confusión de algoritmo | Cambiar alg a none |
Punto clave: La seguridad no se trata solo de un endpoint. Se trata de entender cómo todas las piezas interactúan y dónde fallan las suposiciones.
2. Amenazas Comunes: OWASP API Security Top 10
El OWASP API Security Top 10 cataloga las vulnerabilidades más críticas de APIs. Examinemos cada una.
API1: Autorización de Nivel de Objeto Rota (BOLA)
El problema: Los usuarios pueden acceder a recursos que pertenecen a otros usuarios manipulando IDs de objetos.
Ejemplo:
# Usuario A solicita su pedido
GET /orders/12345
Authorization: Bearer token_usuario_a
# Usuario A cambia el ID para acceder al pedido del Usuario B
GET /orders/12346
Authorization: Bearer token_usuario_a # Mismo token, diferente pedido!Por qué ocurre: La API confía en el ID del objeto sin verificar que el usuario es dueño de ese recurso.
Prevención:
- Siempre verificar la propiedad del recurso antes de devolver datos
- Usar referencias indirectas (IDs específicos por usuario) en lugar de IDs de base de datos
- Implementar verificaciones de autorización en la capa de datos, no solo en la capa de API
API2: Autenticación Rota
El problema: Mecanismos de autenticación débiles permiten a atacantes suplantar usuarios.
Fallos comunes:
- Políticas de contraseñas débiles
- Sin rate limiting en intentos de login
- Tokens que no expiran
- Credenciales en URLs (query strings)
- Falta de autenticación multifactor para operaciones sensibles
API3: Autorización de Nivel de Propiedad de Objeto Rota
El problema: Los usuarios pueden modificar propiedades de objetos a las que no deberían tener acceso.
Ejemplo:
// Usuario intenta actualizar su perfil
PUT /users/me
{
"name": "Alice",
"email": "[email protected]",
"role": "admin", // No debería permitirse!
"verified": true // No debería permitirse!
}Prevención: Definir explícitamente qué campos pueden modificar los usuarios. Nunca aceptar ciegamente todos los campos de la petición.
API4: Consumo de Recursos Sin Restricción
El problema: Las APIs no limitan cuántos recursos puede consumir un usuario.
Impactos:
- Denegación de Servicio (DoS)
- Facturas inesperadas en la nube
- Agotamiento de base de datos
Ejemplos:
- Sin límites de paginación (
GET /users?limit=1000000) - Operaciones costosas sin throttling (búsquedas complejas)
- Subida de archivos sin límites de tamaño
API5: Autorización de Nivel de Función Rota
El problema: Los usuarios pueden acceder a funciones administrativas que no deberían.
Ejemplo:
# Usuario regular descubre endpoint de admin
DELETE /admin/users/12345
Authorization: Bearer token_usuario_regular
# La API no verifica que el usuario tenga privilegios de adminPrevención: Implementar control de acceso basado en roles (RBAC) y verificar permisos para cada función.
API6: Acceso Sin Restricción a Flujos de Negocio Sensibles
El problema: Los atacantes abusan de funcionalidades legítimas para propósitos maliciosos.
Ejemplos:
- Crear miles de cuentas para abusar de pruebas gratuitas
- Automatizar flujos de compra para acaparar inventario
- Scraping de datos a escala a pesar de los términos de servicio
API7: Falsificación de Peticiones del Lado del Servidor (SSRF)
El problema: La API obtiene recursos de URLs proporcionadas por el usuario, permitiendo acceso a sistemas internos.
Ejemplo:
// Petición legítima
POST /fetch-metadata
{
"url": "https://example.com/image.png"
}
// Petición maliciosa
POST /fetch-metadata
{
"url": "http://169.254.169.254/latest/meta-data/" // Metadata de AWS!
}API8: Configuración Incorrecta de Seguridad
El problema: Configuraciones por defecto, funcionalidades innecesarias o headers de seguridad faltantes.
Ejemplos:
- Modo debug habilitado en producción
- Credenciales por defecto sin cambiar
- Métodos HTTP innecesarios habilitados (TRACE, OPTIONS)
- Headers de seguridad faltantes (ver Sección 6)
- Mensajes de error verbosos exponiendo detalles internos
API9: Gestión de Inventario Inadecuada
El problema: Las organizaciones pierden seguimiento de sus APIs, dejando versiones antiguas expuestas.
Problemas comunes:
- Versiones antiguas de API aún accesibles (
/v1/junto con/v3/) - APIs de desarrollo/staging expuestas a internet
- Endpoints no documentados creados por desarrolladores
- APIs shadow creadas por otros equipos
API10: Consumo Inseguro de APIs
El problema: Tu API confía ciegamente en datos de APIs de terceros.
Ejemplo: Tu API llama a una API de un socio e inserta la respuesta directamente en tu base de datos sin validación, permitiendo ataques de inyección a través del tercero.
3. Validación de Entrada: Tu Primera Línea de Defensa
Cada dato que entra a tu API es potencialmente malicioso. La validación de entrada es la práctica de verificar que los datos cumplen los formatos esperados antes de procesarlos.
La Regla de Oro
Nunca confíes en la entrada del cliente. Valida todo.
Esto incluye:
- Cuerpos de petición
- Parámetros de query
- Parámetros de ruta
- Headers
- Subida de archivos
Tipos de Validación
1. Validación de tipo: ¿Es el tipo de dato esperado?
// Esperado: número
// Recibido: "123; DROP TABLE users"
const userId = parseInt(req.params.id);
if (isNaN(userId)) {
return res.status(400).json({ error: "ID de usuario inválido" });
}2. Validación de formato: ¿Coincide con el patrón esperado?
// Validación de formato de email
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
return res.status(400).json({ error: "Formato de email inválido" });
}3. Validación de rango: ¿Está el valor dentro de límites aceptables?
// Validación de límite de paginación
const limit = Math.min(Math.max(parseInt(req.query.limit) || 20, 1), 100);
// limit estará entre 1 y 100
4. Validación de lógica de negocio: ¿Tiene sentido el valor?
// Validación de monto de transferencia
if (amount <= 0) {
return res.status(400).json({ error: "El monto debe ser positivo" });
}
if (amount > account.balance) {
return res.status(400).json({ error: "Fondos insuficientes" });
}Validación con Esquemas
En lugar de validar cada campo manualmente, usa validadores de esquema como JSON Schema, Joi, Zod o Yup:
import { z } from 'zod';
const TransferSchema = z.object({
fromAccount: z.string().uuid(),
toAccount: z.string().uuid(),
amount: z.number().positive().max(1000000),
currency: z.enum(['USD', 'EUR', 'GBP']),
description: z.string().max(200).optional()
});
// Uso
try {
const validData = TransferSchema.parse(req.body);
// Procesar validData de forma segura
} catch (error) {
return res.status(400).json({ error: error.errors });
}Codificación de Salida
La validación previene que datos malos entren. La codificación de salida previene que datos malos causen daño al salir:
// No devolver entrada de usuario cruda en respuestas HTML
// Mal:
res.send(`<p>Bienvenido, ${username}</p>`);
// Bien:
import { escape } from 'html-escaper';
res.send(`<p>Bienvenido, ${escape(username)}</p>`);Qué No Detectará la Validación
La validación detiene datos malformados, pero no:
- Usuarios autorizados haciendo cosas no autorizadas (BOLA)
- Datos válidos usados para propósitos maliciosos (abuso de lógica de negocio)
- Ataques a través de otros canales (ingeniería social)
La validación es necesaria pero no suficiente. La defensa requiere múltiples capas.
4. CORS: Qué Protege Realmente
CORS (Cross-Origin Resource Sharing) es uno de los mecanismos de seguridad más malentendidos. Aclaremos qué hace y qué no hace.
La Política del Mismo Origen
Los navegadores implementan la Política del Mismo Origen: los scripts en un origen no pueden acceder libremente a recursos de otro origen.
Origen = Protocolo + Dominio + Puerto
| URL | Origen |
|---|---|
https://api.example.com/users | https://api.example.com |
https://api.example.com:443/users | https://api.example.com (443 es default) |
http://api.example.com/users | http://api.example.com (protocolo diferente) |
https://app.example.com/ | https://app.example.com (subdominio diferente) |
Qué Hace Realmente CORS
CORS es una relajación de la Política del Mismo Origen. Permite a los servidores especificar qué orígenes pueden acceder a sus recursos.
sequenceDiagram
participant Browser as Navegador
participant Frontend as app.example.com
participant API as api.example.com
Browser->>Frontend: Cargar página
Frontend->>Browser: JavaScript quiere llamar API
Browser->>API: OPTIONS /users (Preflight)
Note over Browser,API: "¿Puede app.example.com acceder?"
API->>Browser: Access-Control-Allow-Origin: app.example.com
Browser->>API: GET /users
API->>Browser: Datos de respuesta
Browser->>Frontend: Datos entregadosHeaders CORS Explicados
Headers de respuesta del servidor:
# Qué orígenes pueden acceder al recurso
Access-Control-Allow-Origin: https://app.example.com
# Qué métodos HTTP están permitidos
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
# Qué headers puede enviar el cliente
Access-Control-Allow-Headers: Content-Type, Authorization
# Si incluir credenciales (cookies, headers de auth)
Access-Control-Allow-Credentials: true
# Cuánto tiempo cachear la respuesta preflight (segundos)
Access-Control-Max-Age: 86400La Petición Preflight
Para peticiones “no simples” (PUT, DELETE, headers personalizados, cuerpo JSON), los navegadores envían primero una petición OPTIONS preflight:
OPTIONS /users [HTTP/1.1](https://reference.apios.info/es/terms/http-1-1/)
Host: api.example.com
Origin: https://app.example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Content-Type, AuthorizationEl servidor debe responder con los headers CORS apropiados, o el navegador bloquea la petición real.
Errores Comunes de CORS
Error 1: Permitir todos los orígenes
# PELIGROSO: Cualquier sitio web puede hacer peticiones!
Access-Control-Allow-Origin: *Problema: Cualquier sitio web puede llamar a tu API desde su JavaScript. Combinado con Allow-Credentials: true, los atacantes pueden suplantar usuarios logueados.
Error 2: Reflejar el header Origin
# PELIGROSO: Devolver el origen que se envía
origin = request.headers.get('Origin')
response.headers['Access-Control-Allow-Origin'] = originProblema: Esto es equivalente a * pero funciona con credenciales, haciéndolo aún más peligroso.
Error 3: Confiar en origen null
# PELIGROSO: el origen null puede ser falsificado
Access-Control-Allow-Origin: nullProblema: Los atacantes pueden enviar peticiones desde iframes sandboxed con origin: null.
Qué NO Protege CORS
CORS solo afecta navegadores. No protege contra:
- Peticiones servidor a servidor (curl, Postman, servicios backend)
- Apps móviles
- Cualquiera que copie la petición desde DevTools del navegador
CORS no es autenticación. Es una política del navegador que previene que usuarios incautos sean explotados por sitios web maliciosos.
Configuración CORS Correcta
const cors = require('cors');
const allowedOrigins = [
'https://app.example.com',
'https://admin.example.com'
];
app.use(cors({
origin: (origin, callback) => {
// Permitir peticiones sin origen (apps móviles, curl)
if (!origin) return callback(null, true);
if (allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(new Error('No permitido por CORS'));
}
},
credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type', 'Authorization']
}));5. Rate Limiting: Protección Contra Abuso
El rate limiting restringe cuántas peticiones puede hacer un cliente en un período de tiempo dado. Es esencial para prevenir abuso y asegurar uso justo de recursos.
Por Qué Importa el Rate Limiting
Sin rate limiting, los atacantes pueden:
- Fuerza bruta en autenticación: Probar millones de contraseñas
- Denegación de Servicio: Abrumar tus servidores con peticiones
- Scraping de datos: Descargar toda tu base de datos
- Explotar lógica de negocio: Crear cuentas ilimitadas, abusar promociones
- Generar facturas masivas: Si pagas por llamada a APIs de terceros
Conceptos de Rate Limiting
graph LR
subgraph "Ventana de Rate Limit"
A[Petición 1] --> B[Petición 2]
B --> C[Petición 3]
C --> D[...]
D --> E[Petición 100]
E --> F[Petición 101 - BLOQUEADA]
end
G[Ventana se Reinicia] --> A
style F fill:#ffcdd2
style G fill:#c8e6c9Conceptos clave:
| Término | Descripción | Ejemplo |
|---|---|---|
| Límite | Máximo de peticiones permitidas | 100 peticiones |
| Ventana | Período de tiempo para contar | por minuto |
| Identificador | Cómo identificar al cliente | Dirección IP, API key, ID de usuario |
| Cuota | Las peticiones restantes | 73/100 restantes |
Estrategias Comunes de Rate Limiting
1. Ventana Fija
- Contar peticiones en intervalos de tiempo fijos
- Simple pero puede permitir ráfagas en bordes de ventana
- Ejemplo: 100 peticiones por minuto, reinicia en :00
2. Ventana Deslizante
- Suaviza el problema de ventana fija
- Más complejo de implementar
- Ejemplo: 100 peticiones en cualquier período de 60 segundos
3. Token Bucket
- Los tokens se reponen a una tasa fija
- Permite ráfagas hasta el tamaño del bucket
- Ejemplo: 10 tokens/segundo, bucket contiene 100
4. Leaky Bucket
- Las peticiones se procesan a tasa fija
- Las peticiones excedentes se encolan o descartan
- Patrón de tráfico más suave
Headers de Rate Limit
Headers estándar para comunicar estado de rate limit:
HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 73
X-RateLimit-Reset: 1641024000
# Cuando se excede el límite
HTTP/1.1 [429 Too Many Requests](https://reference.apios.info/es/terms/429-too-many-requests/)
Retry-After: 60Qué Limitar con Rate Limiting
| Recurso | Por Qué | Límite Ejemplo |
|---|---|---|
| Intentos de login | Prevenir fuerza bruta | 5 por minuto por IP |
| Reset de contraseña | Prevenir enumeración | 3 por hora por email |
| Endpoints de API | Prevención general de abuso | 1000 por hora por usuario |
| Operaciones costosas | Prevenir DoS | 10 por minuto |
| Subida de archivos | Abuso de almacenamiento | 100 MB por día |
Eligiendo Identificadores
Cómo identificas a los clientes afecta la seguridad:
| Identificador | Pros | Contras |
|---|---|---|
| Dirección IP | No requiere auth | IPs compartidas, VPNs, proxies |
| API key | Clara responsabilidad | La key puede ser robada |
| ID de Usuario | Preciso por usuario | Requiere autenticación |
| Combinación | Más preciso | Complejo de implementar |
Mejor práctica: Usar múltiples identificadores. Rate limit por IP para endpoints no autenticados, por ID de usuario para los autenticados.
Manejando Rate Limit Excedido
Devolver una respuesta útil:
{
"error": "rate_limit_exceeded",
"message": "Demasiadas peticiones. Por favor reintente en 60 segundos.",
"retryAfter": 60,
"limit": 100,
"window": "1 minuto",
"documentation": "https://api.example.com/docs/rate-limits"
}6. Headers de Seguridad: Headers HTTP Esenciales
Los headers HTTP proporcionan una forma simple de habilitar funciones de seguridad del navegador. Toda API debería implementar estos.
Headers de Seguridad Esenciales
1. Strict-Transport-Security (HSTS)
Fuerza a los navegadores a usar HTTPS, previniendo ataques de downgrade.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadmax-age: Cuánto tiempo recordar la política (1 año recomendado)includeSubDomains: Aplicar a todos los subdominiospreload: Enviar a listas de precarga de navegadores
2. Content-Security-Policy (CSP)
Controla qué recursos puede cargar el navegador. Menos relevante para APIs JSON, pero crítico si tu API devuelve HTML.
Content-Security-Policy: default-src 'none'; frame-ancestors 'none'3. X-Content-Type-Options
Previene que los navegadores hagan MIME-sniffing de respuestas.
X-Content-Type-Options: nosniffPor qué importa: Sin esto, los navegadores podrían interpretar JSON como HTML, habilitando ataques XSS.
4. X-Frame-Options
Previene que tus páginas sean embebidas en iframes (protección contra clickjacking).
X-Frame-Options: DENY5. Cache-Control
Controla el comportamiento de caché. Crítico para datos sensibles.
# Para respuestas sensibles
Cache-Control: no-store, no-cache, must-revalidate, private
# Para respuestas públicas, cacheables
Cache-Control: public, max-age=36006. Content-Type
Siempre establecer el tipo de contenido correcto para prevenir confusión MIME.
Content-Type: application/json; charset=utf-8Ejemplo Completo de Headers de Seguridad
const helmet = require('helmet');
// Aplicar headers de seguridad
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'none'"],
frameAncestors: ["'none'"]
}
},
hsts: {
maxAge: 31536000,
includeSubDomains: true,
preload: true
},
noSniff: true,
frameguard: { action: 'deny' }
}));
// Headers personalizados para respuestas de API
app.use((req, res, next) => {
res.setHeader('Cache-Control', 'no-store');
res.setHeader('Pragma', 'no-cache');
next();
});Headers a Evitar
Eliminar estos headers ya que exponen información:
# Eliminar - revela tecnología del servidor
Server: Apache/2.4.41 (Ubuntu)
X-Powered-By: Express
# Eliminar - revela versiones
X-AspNet-Version: 4.0.303197. Poniéndolo Todo Junto: Checklist de Seguridad
Aquí hay un checklist práctico para asegurar tu API:
Autenticación y Autorización
- Usar autenticación fuerte (OAuth 2.0, JWT con validación apropiada)
- Implementar verificaciones de autorización para cada endpoint
- Verificar propiedad del recurso, no solo autenticación
- Usar tokens de corta duración con mecanismos de refresh
- Implementar autenticación multifactor para operaciones sensibles
Entrada y Salida
- Validar toda entrada (tipo, formato, rango, lógica de negocio)
- Usar librerías de validación de esquemas
- Sanitizar/codificar salida para prevenir inyección
- Devolver formatos de error consistentes (JSON, no HTML)
- No exponer detalles internos en mensajes de error
Rate Limiting y Prevención de Abuso
- Rate limit en todos los endpoints (especialmente auth)
- Usar identificadores apropiados (IP, ID de usuario, API key)
- Devolver respuestas 429 útiles con Retry-After
- Monitorear patrones de abuso
Seguridad de Transporte
- Usar HTTPS en todas partes (no HTTP)
- Implementar header HSTS
- Usar cookies seguras (Secure, HttpOnly, SameSite)
- Mantener configuración TLS actualizada
Headers
- Establecer todos los headers de seguridad (HSTS, CSP, X-Content-Type-Options)
- Eliminar headers de revelación de información (Server, X-Powered-By)
- Usar Content-Type correcto
- Establecer Cache-Control apropiado
CORS
- Lista blanca de orígenes específicos (sin wildcard con credenciales)
- No reflejar header Origin
- Limitar métodos y headers permitidos
8. Qué Viene: Curso de Seguridad Defensiva de APIs
Esta guía cubrió los fundamentos de seguridad de APIs: entender la superficie de ataque, amenazas comunes y controles esenciales. Pero hay mucho más que aprender:
Temas Cubiertos en el Curso
El curso de Seguridad Defensiva de APIs profundiza en:
- Modelado de amenazas práctico: Cómo identificar sistemáticamente vulnerabilidades en tus APIs
- Técnicas de testing de seguridad: Testing manual, escaneo automatizado, fuzzing
- Configuración de WAF y API Gateway: Guías de configuración del mundo real
- Deep-dive en autenticación: Flujos OAuth 2.0, seguridad JWT, gestión de sesiones
- Rate limiting avanzado: Implementación de token bucket, rate limiting distribuido
- Monitoreo de seguridad: Logging, alertas, respuesta a incidentes
- Requisitos de cumplimiento: Implicaciones de GDPR, PCI-DSS, SOC 2 para APIs
Por Qué un Curso
La seguridad requiere práctica, no solo conocimiento. El curso incluye:
- Labs interactivos donde atacas y defiendes APIs
- Casos de estudio reales de brechas de seguridad
- Templates de configuración para frameworks populares
- Ejercicios de revisión de código
- Herramientas y checklists de evaluación
Términos de Vocabulario Relacionados
Profundiza tu entendimiento con estos términos relacionados:
- CORS - Mecanismo de Cross-Origin Resource Sharing
- Rate Limiting - Control de frecuencia de peticiones
- Seguridad de APIs - Vista general de preocupaciones de seguridad de APIs
- OWASP - Open Web Application Security Project
- Validación de Entrada - Validación de datos entrantes
- Autenticación - Verificación de identidad
- Autorización - Verificación de permisos
- JWT - JSON Web Tokens
- API Key - Autenticación simple de API
- Códigos de Estado HTTP - Entendiendo códigos de respuesta