🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónWebhooks entrantes: firma y marca de tiempo
5 tareas · 40 min · Principiante
Un webhook entrante es una dirección pública de tu aplicación a la que un tercero le avisa que algo pasó: un pago aprobado, un reembolso. Cualquiera puede enviarle una petición, así que lo único que separa un aviso real de uno inventado es la firma, y lo único que separa un aviso de hoy de uno copiado hace días es la marca de tiempo. Trasteos Corotos tiene un trasteo pagado que su proveedor de pagos no conoce. Tienes el receptor, el resumen de cómo firma el proveedor, el registro de avisos y la liquidación.
Objetivo de la sala
Un webhook entrante es una dirección pública de tu aplicación a la que un tercero le avisa que algo pasó: un pago aprobado, un reembolso. Cualquiera puede enviarle una petición, así que lo único que separa un aviso real de uno inventado es la firma, y lo único que separa un aviso de hoy de uno copiado hace días es la marca de tiempo. Trasteos Corotos tiene un trasteo pagado que su proveedor de pagos no conoce. Tienes el receptor, el resumen de cómo firma el proveedor, el registro de avisos y la liquidación.El esquema más extendido es un código de autenticación de mensajes (HMAC) con un secreto que comparten el proveedor y el receptor. El proveedor calcula el código sobre el aviso y lo manda en una cabecera; el receptor lo recalcula con el mismo secreto y compara. Si coinciden, quien envió conoce el secreto y el contenido no cambió por el camino.
Eso es todo lo que prueba. No dice cuándo se envió ni si ya se recibió antes: un aviso legítimo copiado de un registro sigue teniendo una firma perfecta dentro de tres días. Por eso los proveedores serios incluyen en lo firmado una marca de tiempo y piden al receptor que rechace lo que se aleje demasiado de su reloj. CWE nombra las dos fallas por separado: verificar mal una firma criptográfica (CWE-347) y aceptar una autenticación capturada y repetida (CWE-294).
Responde para continuar
Un aviso llega con una firma HMAC que el receptor recalcula y coincide. ¿Qué sabe el receptor con certeza?
Ver pista de ayuda
La firma habla del contenido y del secreto; no habla del reloj ni de la red.
Abre el laboratorio. Lee webhook-pagos.js de arriba abajo antes de mirar el registro: el primer bloque decide qué pasa cuando falta la cabecera de firma, y el comentario explica por qué se escribió así. Luego compara con lo que dice documentacion-proveedor.txt sobre los avisos de prueba.
Responde para continuar
¿Qué evento se procesó sin firma? Escribe su identificador tal como aparece en el registro.
Ver pista de ayuda
Busca la línea cuya columna de firma no dice ni válida ni inválida.
Un aviso falso procesado no es un problema de código: es un trasteo que se entrega sin cobrar. Cruza el registro con liquidacion-proveedor.txt. El proveedor solo liquida lo que de verdad cobró.
Responde para continuar
¿Qué pedido quedó marcado como pagado por ese aviso y no aparece en la liquidación del proveedor?
Ver pista de ayuda
Es el pedido de la misma línea del registro.
El código separa la marca de tiempo de la cabecera, la usa para calcular la firma y no vuelve a mirarla. Hay en el registro un aviso con firma válida que ya se había recibido, ahora desde una dirección fuera del rango que publica el proveedor. Mide cuánto tiempo pasó entre el momento firmado y su llegada, y compáralo con la tolerancia que recomienda el proveedor.
Responde para continuar
¿Cuántas horas completas pasaron entre la marca de tiempo firmada de ese aviso repetido y su recepción?
Ver pista de ayuda
Compara las columnas recibido y t firmado de la última línea del registro.
La nota al pie del registro cuenta el fallo opuesto: un aviso real se rechazó y el proveedor sí lo liquidó. Mira sobre qué texto calcula el receptor la firma y compáralo con lo que firma el proveedor según su documentación. Ese mismo detalle es el que empujó al equipo, semanas antes, a relajar otras comprobaciones.
Lo que hay que cambiar
El receptor correcto lee el cuerpo crudo, rechaza todo aviso sin cabecera de firma (los de prueba también vienen firmados, con su propio secreto), descarta la marca de tiempo que se aleje de la tolerancia acordada, calcula la firma sobre la marca y el cuerpo exactos y compara con una función de tiempo constante. La lista de direcciones del proveedor puede sumarse como capa adicional, pero no sustituye a la firma.
Responde para continuar
¿Por qué se rechazó EV-55140 aunque el proveedor lo envió y lo liquidó?
Ver pista de ayuda
Lee la nota del equipo sobre el orden de las claves del cuerpo.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.