Assinatura HMAC em webhooks: como saber que a mensagem é legítima
Qualquer um pode enviar um "pagamento aprovado" falso para a URL do seu webhook. A assinatura HMAC prova que a mensagem veio mesmo do parceiro.
Por Equipe We Codex3 min de leitura
A URL que recebe webhooks é pública: precisa ser, para que o parceiro consiga enviar eventos. Isso significa que qualquer pessoa que a descubra pode enviar requisições falsas — como confirmar um pagamento que nunca aconteceu.
Como a assinatura funciona
O parceiro e o seu sistema compartilham um segredo. A cada evento, o parceiro calcula um código (HMAC) a partir do conteúdo da mensagem e do segredo, e o envia num cabeçalho. Seu sistema recalcula o código com o mesmo segredo e compara.
import crypto from 'node:crypto'
function assinaturaValida(corpoBruto: Buffer, assinatura: string, segredo: string) {
const esperado = crypto.createHmac('sha256', segredo).update(corpoBruto).digest('hex')
return crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(assinatura))
}Detalhes que fazem diferença
- 1.Use o corpo bruto da requisição, antes de qualquer conversão para JSON — reformatar muda a assinatura.
- 2.Comparação em tempo constante (
timingSafeEqual), para não vazar informação. - 3.Verifique o horário do evento, quando enviado, para rejeitar mensagens antigas reenviadas.
- 4.Segredo guardado com cuidado (Variáveis de ambiente e segredos: o .env não é cofre).
- 5.Rejeite antes de processar.
E se o parceiro não assina?
Confirme os dados consultando a API do parceiro antes de agir, ou restrinja os IPs de origem quando ele os informa.
A recepção confiável — idempotência, filas e reconciliação — está em Webhooks confiáveis: idempotência, retentativas e ordem dos eventos, e a proteção de pagamentos em Idempotência: como evitar cobrança duplicada e pedidos repetidos.
Veja Segurança Anti-Hacker da We Codex ou fale com a gente.
- Webhooks
- HMAC
- Segurança
- Integrações
Resolver de vez, com quem faz isso todo dia
Quer saber quão exposto está o seu sistema hoje?
Este artigo mostra o caminho. A implementação sob medida — o detalhe que muda o resultado no seu caso — é o trabalho da We Codex, empresa de engenharia do grupo Wocom.
Continue lendo
Tudo sobre Segurança- Ler artigo
Backend & APIs3 min
Webhooks confiáveis: idempotência, retentativas e ordem dos eventos
Webhooks chegam duplicados, fora de ordem ou nem chegam — e o pedido fica "pendente" para sempre. Veja como receber webhooks de forma confiável.
- Ler artigo
Backend & APIs3 min
Variáveis de ambiente e segredos: o .env não é cofre
O arquivo .env com a senha do banco foi parar no repositório — ou no frontend. Veja como guardar segredos de forma segura em projetos web e mobile.
- Ler artigo
Backend & APIs3 min
Idempotência: como evitar cobrança duplicada e pedidos repetidos
O cliente clicou duas vezes em "pagar" e foi cobrado duas vezes. Idempotência é a técnica que impede isso — e todo sistema com pagamentos precisa dela.