Porque é que estão aqui?
Não vamos perder tempo. Está aqui porque está a construir uma funcionalidade de webhook na sua aplicação. Infelizmente, existem algumas coisas que podem dar errado do ponto de vista da segurança. Este artigo tem como objetivo garantir que você não esteja cometendo nenhum erro bem conhecido ao criar webhooks.
Como é que os webhooks funcionam?
Para recapitular rapidamente, os webhooks são pedidos HTTP(S) a terceiros para os informar sobre algo que aconteceu na sua aplicação. Por exemplo, se oferecer uma aplicação que gera facturas, pode oferecer aos seus clientes a oportunidade de configurar uma funcionalidade de webhook que é acionada quando é criada uma nova fatura. Isto significa que, quando a fatura é criada, a sua aplicação envia um pedido HTTP(S) para uma localização que é determinada pelo utilizador. O utilizador pode utilizar isto para configurar os seus próprios fluxos de trabalho personalizados que são acionados pelo webhook, tais como o agendamento de e-mails de lembrete ou o envio de uma mensagem ao cliente no Slack.
Lista de controlo: garantir a segurança das implementações de webhooks
1. Derrotar os ataques do tipo SSRF
Neste tipo de ataque, o atacante tenta obter informações (por exemplo, metadados de instância numa nuvem) explorando a funcionalidade webhook. Para o contrariar, deve tomar as seguintes medidas.
Validar a entrada do utilizador
- Básico: Efectua uma validação simples do URL.
- Melhor: Garantir que o URL começa com "https://", não permitir "file://" e outros esquemas não HTTPS.
Restringir endereços locais
- Bloquear IPs locais típicos: 127.0.x, 192.168.x, 172.x.
- Proibir "localhost" e "http://"
Limite de exposição logarítmica
- Mostrar apenas os códigos de estado HTTP nos registos virados para o utilizador.
- Evite apresentar cabeçalhos ou conteúdos do corpo.
✅ Avançado: Validação de URL melhorada
- Exigir um cabeçalho de resposta específico para pedidos POST, exclusivo para o cliente.
- Manter esta verificação continuamente, mesmo após a configuração inicial, para contrariar as alterações de DNS...

2. Permitir que os seus utilizadores verifiquem a autenticidade dos dados
O consumidor do webhook tem de ter uma forma de saber que os dados provêm realmente da sua aplicação. Pode utilizar qualquer um dos seguintes métodos.
Verificação de mensagens de teste
Em primeiro lugar, permitir que os utilizadores accionem uma mensagem de teste para testar os mecanismos de segurança.
Hash de verificação HMAC
Um dos mecanismos de segurança mais eficazes para as funcionalidades dos webhooks é a implementação do HMAC para a integridade e autenticidade dos dados.
O processo básico pode ser resumido da seguinte forma:
- Gerar um hash da carga útil utilizando SHA-256 e uma chave secreta.
- Enviar o HMAC com a carga útil.
- Os destinatários recriam o hash para verificar a autenticidade e a integridade da carga útil.
✅ Inclusão de carimbo de data/hora
Esta é mais uma mitigação de segurança avançada. Adicionar um carimbo de data/hora à carga útil para evitar ataques de repetição. Garante que as mensagens não sejam reutilizadas ou alteradas.
Certificados TLS do lado do cliente
Autenticar chamadas HTTP com certificados TLS do lado do cliente. Isto é particularmente atrativo para os consumidores a nível empresarial.
3. Limitar a taxa e evitar a sobre-exposição de dados
Para a segurança do webhook, enviar muito poucos dados é mais seguro do que anexar demasiados. Embora as chamadas de retorno do webhook devam ser encriptadas utilizando HTTPS, nunca se sabe quem poderá controlar um nome de domínio após alguns anos.
Minimizar a exposição de dados
- Evite enviar informações de identificação pessoal (PII) ou dados sensíveis.
- Em vez de enviar vários pontos de dados (como contact_id, email, nome), envie apenas o contact_id. Permita que os utilizadores obtenham dados adicionais através da sua API pública, se necessário.
Comunicação da política de repetição
- Comunicar claramente a política de repetição e os limites de taxa aos utilizadores.
- Informe-os de que, devido a novas tentativas, as mensagens podem chegar fora de ordem.
- Defina que qualquer resposta 2xx é um sucesso; outras respostas devem despoletar uma nova tentativa.
Utilizar um sistema de filas de espera para a entrega
Implemente um sistema de filas para gerenciar a entrega de webhooks e limitar a saída. Esta abordagem ajuda a evitar a sobrecarga acidental dos servidores dos seus utilizadores em casos extremos, como uma grande importação de CSV que desencadeia chamadas e tentativas excessivas de webhook.
4. Bónus: Alerta de anomalias
Isto é mais para conveniência do programador do que para segurança, mas é uma boa coisa a implementar de qualquer forma.
- Alertar os utilizadores quando são encontradas respostas 4xx e 5xx
- Enviar notificações para informar os utilizadores de quaisquer falhas
Esta adição aumenta a transparência e a capacidade de resposta do seu sistema de webhook.
Conclusão
E aí está! Cobrimos algumas etapas para tornar seus webhooks não apenas funcionais, mas também seguros e fáceis de usar. A implementação destes passos irá proteger a sua aplicação e também melhorar a experiência geral do utilizador. Feliz codificação! 🚀🔒👨💻
Aikido Security é uma plataforma de segurança de software centrada no programador. Ajudamos a manter o seu produto seguro, para que se possa concentrar em escrever código.Não precisa de falar com uma equipa de vendas - basta basta ligar a sua conta GitHub, GitLab, Bitbucket ou Azure DevOps para começar a analisar os seus repositórios gratuitamente.