Qualquer pessoa com acesso à URL do seu webhook pode simular uma entrega. Por isso, a SocialSell assina cada requisição com HMAC-SHA256 usando o secret da sua assinatura — e você deve validar essa assinatura antes de processar qualquer payload.
Cada entrega inclui o header:
O valor é sha256= seguido do HMAC-SHA256 do corpo bruto da requisição, usando o secret da assinatura como chave.
Como validar
Sempre use o corpo bruto (raw bytes) da requisição, não o JSON parseado. Re-serializar o JSON pode alterar a assinatura.
Erros comuns de validação
Boas práticas de segurança
- Sempre valide antes de processar — nunca confie no payload sem verificar a assinatura
- Use
timingSafeEqual — previne timing attacks onde um atacante mede o tempo de comparação para adivinhar a assinatura
- Armazene o
secret como variável de ambiente — nunca no código ou em repositórios
- Rejeite com
401 — não com 200. Responder com sucesso a payloads inválidos pode confundir sistemas de monitoramento
- Rotacione o secret se comprometido — delete a assinatura e crie uma nova com
POST /v1/webhooks