¿Cómo debe verificar tu servicio los webhooks que recibe de un proveedor?
Opciones
- Comprobando el header User-Agent que llega con la petición
- Verificando una firma HMAC del cuerpo crudo, más un timestamp (Opción correcta)
- Aceptando solo peticiones por una conexión HTTPS segura
- Confiando en cualquier petición a una URL secreta y difícil de adivinar
Respuesta
Verificando una firma HMAC sobre el cuerpo crudo con el secreto compartido, más un timestamp para evitar reenvíos
Por qué
Un webhook es el proveedor llamando a TU URL. Cualquiera en internet podría llamar a esa URL con datos falsos.
El proveedor firma cada payload con un secreto compartido (HMAC). Tú recalculas la firma sobre el cuerpo crudo y comparas (con hmac.compare_digest). Si coincide, los datos son genuinos.
Rechaza también los timestamps antiguos (mensajes reenviados) y gestiona los duplicados, porque los proveedores reintentan.
Recuerda
Webhooks: verifica la firma HMAC y rechaza timestamps antiguos.