¿Por qué estás aquí?
No perdamos el tiempo. Estás aquí porque estás construyendo una función webhook en tu aplicación. Desafortunadamente, hay bastantes cosas que pueden salir mal desde una perspectiva de seguridad. El objetivo de este artículo es asegurarte de que no cometes ningún error conocido al crear webhooks.
¿Cómo funcionan los webhooks?
Como resumen rápido, los webhooks son peticiones HTTP(S) a terceros para informarles de algo que ha ocurrido en tu aplicación. Por ejemplo, si usted ofrece una aplicación que genera facturas, podría ofrecer a sus clientes la oportunidad de configurar la funcionalidad webhook que se activa cuando se crea una nueva factura. Esto significa que cuando se crea la factura, su aplicación enviará una solicitud HTTP(S) a una ubicación determinada por el usuario. El usuario puede utilizar esto para configurar sus propios flujos de trabajo personalizados que se activan por el webhook, como la programación de correos electrónicos de recordatorio, o el envío al cliente de un mensaje en Slack.
Lista de comprobación: seguridad de las implementaciones de webhooks
1. Derrotar los ataques de tipo SSRF
En este tipo de ataque, el atacante intenta obtener información (por ejemplo, metadatos de instancia en una nube) explotando la función webhook. Para contrarrestarlo, debes tomar las siguientes medidas.
✅ Validar la entrada del usuario
- Básico: Realiza una validación de URL simple.
- Mejor: Asegúrese de que la URL empieza por "https://", no permita "file://" y otros esquemas no HTTPS.
✅ Restringir direcciones locales
- Bloquea las IP locales típicas: 127.0.x, 192.168.x, 172.x.
- Prohibir "localhost" y "http://"
✅ Límite Log Exposición
- Mostrar sólo los códigos de estado HTTP en los registros orientados al usuario.
- Evite mostrar cabeceras o el cuerpo del contenido.
Avanzado: Validación de URL mejorada
- Requerir un encabezado de respuesta específico para solicitudes POST, único para el cliente.
- Mantenga esta verificación continuamente, incluso después de la configuración inicial, para contrarrestar los cambios de DNS..

2. Permita a sus usuarios verificar la autenticidad de los datos
Tu consumidor de webhooks debe tener una forma de saber que los datos provienen realmente de tu aplicación. Puedes utilizar cualquiera de los siguientes métodos.
✅ Verificación de mensajes de prueba
En primer lugar, permita a los usuarios activar un mensaje de prueba para comprobar los mecanismos de seguridad.
✅ Hash de verificación HMAC
Uno de los mecanismos de seguridad más eficaces para las funcionalidades de los webhooks es la implementación de HMAC para la integridad y autenticidad de los datos.
El proceso básico puede resumirse como sigue:
- Genera un hash de la carga útil utilizando SHA-256 y una clave secreta.
- Envía el HMAC con la carga útil.
- Los destinatarios recrean el hash para verificar la autenticidad e integridad de la carga útil.
✅ Inclusión de marcas de tiempo
Esto es más una mitigación de seguridad avanzada. Añade una marca de tiempo a la carga útil para evitar ataques de repetición. Asegura que los mensajes no sean reutilizados o alterados.
✅ Certificados TLS del lado del cliente
Autenticar llamadas HTTP con certificados TLS del lado del cliente. Esto resulta especialmente atractivo para los consumidores de nivel empresarial.
3. Limitar la velocidad y evitar la sobreexposición de datos
Para la seguridad de los webhooks, enviar pocos datos es más seguro que adjuntar demasiados. Aunque las devoluciones de llamada de webhook deben cifrarse mediante HTTPS, nunca se puede saber quién podría controlar un nombre de dominio al cabo de unos años.
✅ Minimizar la exposición de datos
- Evite enviar información personal identificable (IPI) o datos sensibles.
- En lugar de enviar varios puntos de datos (como contact_id, email, nombre), envía sólo el contact_id. Deje que los usuarios obtengan datos adicionales a través de su API pública si es necesario.
✅ Comunicación de la política de reintentos
- Comunique claramente a los usuarios la política de reintentos y los límites de velocidad.
- Infórmeles de que, debido a los reintentos, los mensajes pueden llegar desordenados.
- Define que cualquier respuesta 2xx es un éxito; otras respuestas deben provocar un reintento.
✅ Utilizar un sistema de colas para la entrega
Implemente un sistema de colas para gestionar la entrega de webhooks y limitar la salida. Este enfoque ayuda a evitar la saturación accidental de los servidores de los usuarios en casos extremos, como una gran importación de CSV que desencadena un exceso de llamadas y reintentos de webhooks.
4. Bonificación: Alerta de anomalías
Esto es más por comodidad del desarrollador que por seguridad, pero no deja de ser una buena medida.
- Alerta a los usuarios cuando se encuentran respuestas 4xx y 5xx
- Enviar notificaciones para informar a los usuarios de cualquier fallo
Esta incorporación mejora la transparencia y la capacidad de respuesta de su sistema de webhooks.
Conclusión
¡Y ahí lo tienes! Hemos cubierto algunos pasos para hacer que tus webhooks no sólo sean funcionales, sino también seguros y fáciles de usar. La implementación de estos pasos protegerá tu aplicación y también mejorará la experiencia general del usuario. ¡Feliz codificación! 🚀🔒👨💻
Aikido Security es una plataforma de seguridad de software centrada en el desarrollador. Le ayudamos a mantener su producto seguro, para que pueda centrarse en escribir código. No necesita hablar con un equipo de ventas. simplemente conecte tu cuenta de GitHub, GitLab, Bitbucket o Azure DevOps para empezar a escanear tus repos gratis.