Las APIs REST son la columna vertebral de las aplicaciones modernas. También son uno de los vectores de ataque más comunes. Veamos las vulnerabilidades más críticas que encontramos en nuestras auditorías.
1. Autenticación Débil o Inexistente
El error más común que vemos: endpoints que deberían requerir autenticación pero son accesibles sin token.
Checklist de autenticación en APIs
- ¿Todos los endpoints sensibles requieren autenticación?
- ¿Los tokens JWT tienen tiempo de expiración razonable?
- ¿Se valida la firma del JWT en cada request?
- ¿Se usa RS256 o HS256 con clave robusta?
- ¿Hay protección contra fuerza bruta en el endpoint de login?
2. Autorización Incorrecta (IDOR)
Insecure Direct Object References (IDOR) es cuando un usuario puede acceder a recursos de otro usuario simplemente cambiando un ID en la URL.
GET /api/orders/1234 HTTP/1.1
Authorization: Bearer <token_usuario_A>
Si el usuario A puede ver la orden 1234 del usuario B cambiando el ID, tenemos un IDOR.
Solución
Siempre verificar que el recurso solicitado pertenezca al usuario autenticado:
const order = await db.orders.findById(req.params.id);
if (order.userId !== req.user.id) {
return res.status(403).json({ error: 'No autorizado' });
}
3. Rate Limiting Ausente
Sin rate limiting, tu API es vulnerable a:
- Fuerza bruta en login
- Enumeración de usuarios
- Denegación de servicio (DoS)
- Web scraping masivo
Implementación básica
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutos
max: 100, // máximo 100 requests por IP
standardHeaders: true,
legacyHeaders: false,
});
app.use('/api/', limiter);
4. Exposición de Datos en Respuestas
Uno de los hallazgos más frecuentes: las APIs devuelven más datos de los necesarios, incluyendo contraseñas hasheadas, tokens internos, IDs de base de datos o información de infraestructura.
Solución
Definir explícitamente qué campos se devuelven en cada endpoint. Nunca confiar en “filtrar después”. Usar DTOs (Data Transfer Objects) o serializers que definan la respuesta exacta.
La seguridad de APIs no es un feature adicional: es parte fundamental del diseño. Incorporá estas validaciones desde el día uno.