té o horário do envio (Unix, segundos).v1é o HMAC-SHA256, em hexadecimal, da string"<t>.<corpo>", com o seu segredo (whsec_..., o da URL ou o da conta).
Como validar
1
Pegue o corpo cru
Os bytes exatos da requisição, antes de qualquer parse de JSON. Reformatar o JSON muda a assinatura.
2
Separe t e v1
Divida o cabeçalho por vírgula e cada parte por
=.3
Recuse horário velho
Se
t estiver a mais de 5 minutos do relógio do seu servidor, recuse (proteção contra repetição).4
Calcule e compare
HMAC-SHA256(segredo, t + "." + corpo) em hex. Compare com v1 em tempo constante.5
Ignore repetidos
Guarde o
id do evento (evt_...) e descarte se já tiver sido processado.Exemplos
- Node.js
- PHP
- Python