Skip to main content

Visão Geral

Proteger seus endpoints de webhook é crítico para garantir que as solicitações de webhook venham do Gu1 e não de atores maliciosos. Este guia cobre como verificar assinaturas de webhook, implementar melhores práticas de segurança e evitar erros de segurança comuns.

Verificação de Assinatura

Gu1 assina todas as solicitações de webhook com uma assinatura HMAC SHA-256 usando seu secret de webhook. A assinatura é enviada no header X-Webhook-Signature, permitindo que você verifique se a solicitação é autêntica.

Como Funciona a Verificação de Assinatura

  1. Gu1 gera uma assinatura: Ao enviar um webhook, Gu1 cria um hash HMAC SHA-256 do corpo raw da solicitação usando seu secret de webhook
  2. Assinatura é enviada no header: A assinatura é incluída no header X-Webhook-Signature
  3. Seu servidor recalcula: Seu endpoint recalcula a assinatura usando o mesmo secret e corpo raw
  4. Comparar assinaturas: Se as assinaturas corresponderem, o webhook é autêntico
Sempre verifique assinaturas de webhook em produção. Sem verificação, qualquer pessoa pode enviar webhooks falsos para seu endpoint e potencialmente comprometer seu sistema.

Exemplos de Verificação de Assinatura

Node.js (Express)

Crítico: Você deve verificar a assinatura usando o corpo raw da solicitação antes de ser analisado como JSON. Se você verificar contra o corpo JSON analisado (por exemplo, JSON.stringify(req.body)), a assinatura não corresponderá porque a formatação JSON pode diferir.

Python (Flask)

Use hmac.compare_digest() em vez de == para comparar assinaturas em Python. Esta função realiza uma comparação segura contra timing que previne ataques de timing.

Go (Gin)

Corpo Raw vs JSON Analisado

Um erro comum é verificar a assinatura usando o objeto JSON analisado em vez do corpo raw da solicitação. Isso sempre falhará porque a formatação JSON pode diferir.

O que a Gu1 assina (e o que não assina)

A Gu1 calcula HMAC-SHA256(secret, raw_request_body) e envia o digest hexadecimal em X-Webhook-Signature.
Use comparação timing-safe ao validar a assinatura (por exemplo crypto.timingSafeEqual no Node.js). Veja a seção de boas práticas abaixo.

Histórico de webhooks no dashboard

O monitor de webhooks exibe o payload para debug e suporte. Essa visualização não é a string byte a byte que foi assinada no envio. Pretty-print, copiar da UI ou JSON.stringify() em um objeto parseado pode gerar uma string diferente e fazer uma entrega correta parecer inválida. Para depurar uma falha, compare o header X-Webhook-Signature recebido pelo seu endpoint com o HMAC calculado sobre o raw body daquele mesmo request HTTP. Não re-verifique apenas com o JSON do dashboard.

Falhas intermitentes de assinatura

Se a verificação funciona em alguns eventos mas em outros retorna 401 Invalid signature com o mesmo secret e endpoint, as causas mais comuns são:
  1. JSON parseado e re-serializadoJSON.stringify(req.body) após express.json() (ou equivalente) não reproduz de forma confiável os bytes do body da Gu1. Payloads diferentes (ordem de chaves, forma aninhada, formatação numérica) podem falhar só às vezes.
  2. Middleware que altera o body — deduplicar arrays, remover campos null, ordenar chaves ou normalizar strings antes de verificar muda o input assinado.
  3. Secret incorreto — secret regenerado no dashboard enquanto o valor antigo permanece no seu ambiente.
  4. Header de assinatura ausente — se o webhook não tiver secret configurado, a Gu1 pode omitir X-Webhook-Signature; tratar header ausente como assinatura inválida é esperado.
A verificação de assinatura é opcional, mas recomendada. A Gu1 ainda entrega webhooks se você não verificar; o 401 é retornado pelo seu servidor quando sua lógica de verificação rejeita o request.

Padrões de Idempotência

Webhooks podem ser entregues mais de uma vez devido a problemas de rede, timeouts ou tentativas. Implemente idempotência para garantir que você processe cada webhook apenas uma vez.

Idempotência Baseada em Banco de Dados

Armazene IDs de webhook processados no seu banco de dados:

Idempotência Baseada em Cache

Para webhooks de alto volume, use um cache como Redis:

Melhores Práticas de Segurança

Nunca pule a verificação de assinatura em ambientes de produção. Esta é sua defesa principal contra webhooks falsos.
Configure seus endpoints de webhook para usar apenas HTTPS. Rejeite solicitações HTTP:
Processe apenas tipos de eventos que você está esperando:
Proteja seu endpoint contra abuso com limitação de taxa:
Nunca codifique secrets de webhook. Use variáveis de ambiente ou gerenciamento de secrets:
Para produção, use um gerenciador de secrets:
  • AWS Secrets Manager
  • HashiCorp Vault
  • Azure Key Vault
  • Google Secret Manager
Valide a estrutura do payload do webhook antes de processar:
Ao comparar assinaturas, use funções de comparação seguras contra timing para prevenir ataques de timing:
Registre todas as tentativas de webhook para auditoria e depuração:
Responda com código de status 200 rapidamente para prevenir tentativas. Processe trabalho pesado assincronamente:
Se o processamento de webhook falhar, armazene para tentativa:

Erros Comuns de Segurança a Evitar

Evite estes erros comuns de segurança que podem comprometer seus endpoints de webhook:

1. Pular Verificação de Assinatura

Risco: Qualquer pessoa pode enviar webhooks falsos para seu endpoint.

2. Verificar JSON Analisado Em Vez de Corpo Raw

Risco: A verificação de assinatura sempre falhará.

3. Usar HTTP Em Vez de HTTPS

Risco: Payloads de webhook podem ser interceptados em trânsito.

4. Codificar Secrets

Risco: Secrets expostos no controle de versão ou logs.

5. Não Implementar Idempotência

Risco: Webhooks duplicados criarão registros duplicados.

6. Expor Erros aos Clientes

Risco: Vazamento de informações internas para atacantes.

7. Não Validar Tipos de Eventos

Risco: Atacantes podem enviar tipos de eventos arbitrários.

8. Usar Secrets Fracos

Risco: Secrets podem ser quebrados por força bruta. Solução: Use secrets fortes e gerados aleatoriamente (pelo menos 32 caracteres).

Testando Segurança de Webhook

Testar Assinaturas Inválidas

Testar Ataques de Replay

Envie o mesmo webhook duas vezes e verifique idempotência:

Monitoramento e Alertas

Configure monitoramento para segurança de webhook:

Próximos Passos

Configuração de Webhook

Aprenda como configurar webhooks

Eventos de Entidades

Lidar com eventos de ciclo de vida de entidades

Eventos KYC

Processar eventos de verificação KYC

Eventos de Regras

Responder a regras de conformidade