Saltar para o conteúdo principal
Didit angaria 7,5 milhões de dólares para construir a infraestrutura para identidade e fraude
Didit
Voltar ao blog
Blog · 13 de julho de 2026

Garantir a Segurança de Webhooks com Verificação de Assinatura para Fluxos de Identidade

Descubra como a verificação de assinatura de webhook é vital para proteger fluxos de trabalho de identidade, prevenindo a adulteração de dados e assegurando a integridade de notificações em tempo real de fornecedores de

Por DiditAtualizado
didit-thumb-91596.png

A verificação de assinatura de webhook é uma medida de segurança crítica que garante a integridade e autenticidade das notificações em tempo real enviadas de um fornecedor de verificação de identidade para a sua aplicação.

Ao lidar com dados de identidade sensíveis e sinais cruciais de fraude, verificar a origem e o conteúdo de cada payload de webhook é inegociável. Sem uma verificação de assinatura de webhook adequada, a sua aplicação fica vulnerável a ataques de repetição, adulteração de dados e injeção de dados não autorizada, o que pode levar a graves violações de segurança e minar a fiabilidade da sua infraestrutura de identidade e fraude.

Porquê a Segurança de Webhooks é Fundamental para Identidade e Fraude

A verificação de identidade (Verificação de Utilizador / KYC - Know Your Customer, Verificação de Negócio / KYB - Know Your Business) e a deteção de fraude (Monitorização de Transações, Rastreio de Carteiras / KYT - Know Your Transaction) dependem de uma troca de dados oportuna e precisa. Os webhooks são a espinha dorsal de muitos desses sistemas, fornecendo atualizações instantâneas sobre o estado da verificação, pontuações de risco ou atividades suspeitas. No entanto, este canal de comunicação em tempo real introduz potenciais vulnerabilidades se não for devidamente protegido.

Imagine um cenário em que um ator malicioso interceta uma notificação de webhook sobre uma verificação de identidade bem-sucedida. Sem verificação de assinatura de webhook, eles poderiam alterar o payload para mostrar uma verificação falhada ou até mesmo injetar uma notificação de sucesso fraudulenta. Isso poderia levar a:

  • Abertura de contas não autorizadas: Se um fraudador conseguir falsificar um estado "verificado", poderá contornar as suas verificações de integração.
  • Alertas de fraude perdidos: Webhooks adulterados poderiam ocultar sinais críticos sobre transações arriscadas ou atividade suspeita da carteira.
  • Problemas de integridade de dados: Dados incorretos ou manipulados a fluir para o seu sistema podem corromper os seus registos e levar a decisões erróneas.

Portanto, implementar uma verificação de assinatura de webhook fiável não é apenas uma boa prática; é um requisito fundamental para manter a segurança e a fiabilidade da sua infraestrutura de identidade e fraude.

Como Funciona a Verificação de Assinatura de Webhook

No seu cerne, a verificação de assinatura de webhook envolve um segredo partilhado e uma função de hash criptográfica. Aqui está uma descrição simplificada do processo:

  1. Segredo Partilhado: Tanto a sua aplicação quanto o remetente do webhook (por exemplo, um fornecedor de verificação de identidade como Didit) concordam com uma chave secreta. Esta chave deve ser única, forte e mantida confidencial.
  2. Hashing do Payload: Antes de enviar um webhook, o fornecedor pega no corpo da solicitação bruta (payload) e combina-o com o segredo partilhado. Esta string combinada é então processada através de uma função de hash criptográfica (por exemplo, HMAC-SHA256).
  3. Geração de Assinatura: A saída da função de hash é a assinatura digital. Esta assinatura é tipicamente enviada como parte de um cabeçalho na solicitação do webhook (por exemplo, X-Didit-Signature).
  4. Verificação na Receção: Quando a sua aplicação recebe o webhook, executa o mesmo processo de hashing: pega no payload bruto do corpo da solicitação, combina-o com a sua cópia do segredo partilhado e faz o hash usando exatamente o mesmo algoritmo.
  5. Comparação: A sua aplicação compara então o hash gerado com a assinatura fornecida no cabeçalho do webhook. Se coincidirem, pode ter a certeza de que:
  • O webhook teve origem no remetente legítimo.
  • O payload não foi adulterado durante o trânsito.

Melhores Práticas para Implementação

Para garantir a máxima segurança, considere estas melhores práticas ao implementar a verificação de assinatura de webhook:

  • Use Segredos Fortes: Gere strings alfanuméricas longas e aleatórias para os seus segredos partilhados. Nunca os codifique diretamente na sua aplicação; use variáveis de ambiente ou um serviço seguro de gestão de segredos.
  • Rode os Segredos Regularmente: Rode periodicamente os seus segredos partilhados para mitigar o risco de comprometimento. Tenha um mecanismo para suportar múltiplos segredos ativos durante um período de rotação.
  • Verificação de Carimbo de Tempo: Muitos fornecedores de webhook incluem um carimbo de tempo no cabeçalho da assinatura. Deve verificar este carimbo de tempo para se proteger contra ataques de repetição. Se um webhook chegar com um carimbo de tempo muito antigo (por exemplo, mais de 5 minutos), rejeite-o.
  • Algoritmo de Hashing Consistente: Garanta que a sua aplicação usa exatamente o mesmo algoritmo de hash criptográfico (por exemplo, HMAC-SHA256, HMAC-SHA512) e codificação que o remetente do webhook.
  • Payload Bruto: Use sempre o corpo da solicitação bruto para hashing, não uma versão analisada. Qualquer pequena alteração, como espaços em branco ou reordenação de chaves JSON, pode invalidar a assinatura.
  • Tratamento de Erros: Implemente um tratamento de erros fiável para verificações de assinatura falhadas. Registe estas tentativas e considere alertar a sua equipa de segurança.
  • Apenas HTTPS: Receba sempre webhooks via HTTPS para encriptar o canal de comunicação e prevenir a interceção.

Exemplo: Verificação de uma Assinatura de Webhook Didit

Vamos ilustrar como a verificação de assinatura de webhook pode parecer na prática, usando um exemplo hipotético em Node.js para um webhook Didit.

Primeiro, configuraria o seu endpoint de webhook no painel de controlo Didit e receberia uma chave secreta.

const crypto = require('crypto');
const express = require('express');
const bodyParser = require('body-parser');

const app = express();
const DIDIT_WEBHOOK_SECRET = process.env.DIDIT_WEBHOOK_SECRET; // Store securely!

// Use raw body parser for webhooks to get the unparsed body
app.use(bodyParser.raw({ type: 'application/json' }));

app.post('/didit-webhook', (req, res) => {
  const signatureHeader = req.headers['x-didit-signature'];
  const timestampHeader = req.headers['x-didit-timestamp']; // Optional, but good practice
  const rawBody = req.body;

  if (!signatureHeader || !DIDIT_WEBHOOK_SECRET) {
    return res.status(400).send('Missing signature header or webhook secret.');
  }

  // Reconstruct the signed payload: timestamp + '.' + rawBody
  // (assuming Didit uses this format, check documentation)
  const signedPayload = `${timestampHeader}.${rawBody.toString('utf8')}`;

  const expectedSignature = crypto
    .createHmac('sha256', DIDIT_WEBHOOK_SECRET)
    .update(signedPayload)
    .digest('hex');

  if (crypto.timingSafeEqual(Buffer.from(signatureHeader), Buffer.from(expectedSignature))) {
    // Signature is valid, now process the webhook payload
    try {
      const event = JSON.parse(rawBody.toString('utf8'));
      console.log('Received verified webhook event:', event.type);
      // Handle your event logic here (e.g., update user status, trigger fraud review)
      res.status(200).send('Webhook received and verified.');
    } catch (parseError) {
      console.error('Error parsing webhook body:', parseError);
      res.status(400).send('Invalid JSON payload.');
    }
  } else {
    console.warn('Webhook signature verification failed for:', signatureHeader);
    res.status(403).send('Invalid webhook signature.');
  }
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
});

Nota: O formato exato do payload assinado (por exemplo, timestamp + '.' + rawBody) e os nomes dos cabeçalhos (x-didit-signature, x-didit-timestamp) serão especificados na documentação do seu fornecedor de webhook. Consulte sempre a documentação oficial para os detalhes de implementação precisos. Os webhooks da Didit seguem os padrões comuns da indústria, garantindo uma integração direta.

Principais Conclusões

  • A verificação de assinatura de webhook é essencial para a segurança e integridade dos dados de identidade e fraude em tempo real.
  • Protege contra adulteração de dados, ataques de repetição e acesso não autorizado.
  • O processo envolve um segredo partilhado, hashing criptográfico e comparação de assinaturas.
  • As melhores práticas incluem segredos fortes, rotação regular, verificação de carimbo de tempo e uso de payloads brutos para hashing.
  • Implemente sempre a verificação de assinatura de webhook para qualquer sistema que lide com informações sensíveis, especialmente na prevenção de identidade e fraude.

Perguntas Frequentes

O que é a verificação de assinatura de webhook?

A verificação de assinatura de webhook é um mecanismo de segurança que usa um segredo partilhado e hashing criptográfico para confirmar que um payload de webhook foi enviado por uma fonte legítima e não foi alterado em trânsito.

Porquê a verificação de assinatura de webhook é importante para os fluxos de identidade?

Para os fluxos de identidade, a verificação de assinatura de webhook impede que os fraudadores falsifiquem os resultados da verificação de identidade, adulterem os alertas de fraude ou injetem dados maliciosos, protegendo assim a integridade dos seus processos de integração de utilizadores e monitorização de transações.

O que acontece se eu não implementar a verificação de assinatura de webhook?

Sem a verificação de assinatura de webhook, a sua aplicação fica vulnerável a vários ataques, incluindo manipulação de dados, acesso não autorizado aos seus sistemas e potenciais danos financeiros e de reputação graves devido a fraude ou violações de conformidade.

O HTTPS por si só pode proteger os meus webhooks?

Embora o HTTPS encripte o canal de comunicação, protegendo contra a interceção, não impede que um ator malicioso crie as suas próprias solicitações de webhook e as envie para o seu endpoint. A verificação de assinatura de webhook é necessária para autenticar o remetente e verificar a integridade dos dados.

O que é um ataque de repetição?

Um ataque de repetição ocorre quando um ator malicioso interceta um webhook legítimo e o reenvia mais tarde para enganar o seu sistema a processar o mesmo evento várias vezes ou a executar uma ação com base em informações desatualizadas. A verificação de carimbo de tempo, juntamente com a verificação de assinatura, ajuda a mitigar este risco.

Didit fornece uma infraestrutura abrangente para identidade e fraude, incluindo notificações de webhook fiáveis para todos os módulos de verificação de identidade (Verificação de Utilizador / KYC, Verificação de Negócio / KYB) e deteção de fraude (Monitorização de Transações, Rastreio de Carteiras / KYT). A nossa plataforma garante que todos os eventos de webhook são assinados, permitindo-lhe implementar a verificação de assinatura de webhook facilmente e proteger os seus fluxos de dados em tempo real. Integre Didit em minutos e comece com 500 verificações gratuitas todos os meses, com verificações de identidade completas a partir de 0,30€, apoiadas por medidas de segurança padrão da indústria como a verificação de assinatura de webhook.

Comece com Didit

Didit é infraestrutura para identidade e fraude — uma API, preços públicos pay-per-use e 500 verificações gratuitas todos os meses. Adicione a Verificação de Utilizador ao seu fluxo e integre em 5 minutos.

Infraestrutura para identidade e fraude.

Uma API para KYC, KYB, Monitorização de Transações e Rastreio de Carteiras. Integre em 5 minutos.

Peça a uma IA para resumir esta página
Verificação de Assinatura de Webhook: Segurança para Identidade