Skip to main content
Toda notificação, inclusive o ping de teste, traz o header:
  • t é o epoch em segundos do envio. Ele muda a cada tentativa, enquanto o corpo e o event_id permanecem os mesmos.
  • v1 é o HMAC-SHA256, em hexadecimal minúsculo, de t + "." + corpo, calculado com o segredo do seu cadastro.
Verifique toda requisição antes de confiar nela e recuse as que não passarem na verificação. É essa assinatura, e não o IP de origem, que garante que a notificação veio da Wincred.
1

Leia o corpo cru

Calcule sobre os bytes exatos recebidos, antes de converter o JSON. Reserializar altera os bytes e invalida a assinatura.
2

Recalcule o HMAC

HMAC-SHA256(segredo, t + "." + corpo), em hexadecimal.
3

Compare em tempo constante

Use a comparação de tempo constante da sua linguagem, em vez de ==, para evitar ataques de temporização.
4

Confira a tolerância

Recuse se a diferença entre o instante atual e t passar de 5 minutos. Essa janela impede que uma requisição capturada seja reutilizada mais tarde.

Vetor de teste

Use estes valores de exemplo, que não pertencem ao seu cadastro, para conferir a sua implementação. Passe como “agora” um instante de até 5 minutos depois de t, por exemplo 1791000100. No terminal:
Em seguida, valide de ponta a ponta com POST /webhooks/test: o ping chega com a assinatura real, calculada com o seu segredo. Veja Testando em dev.