17-webhook-security

O meu SDK verifica webhooks de duas formas. A maioria só faz uma.

17-webhook-security

O meu SDK verifica webhooks de duas formas. A maioria só faz uma.

O gateway eupago oferece dois formatos de webhook: HMAC-SHA256 sobre cleartext, e AES-256-CBC com body encriptado. Não é "um ou outro" — merchants diferentes usam setups diferentes, e tu só sabes qual vais receber quando chega.

No eupago-python ambos são first-class:

→ Webhooks com HMAC: verificação de assinatura com comparação em tempo constante. Não == em hex strings (isso vaza timing). hmac.compare_digest, que é literalmente para isto.
→ Webhooks encriptados AES: derivar a chave AES do webhook secret (SHA-256), buscar o IV no header X-Initialization-Vector, decifrar com padding PKCS7. Depois verificar amount e currency contra o que guardaste ao criar o pagamento — assinatura válida não é negócio válido.
→ Em ambos: dedup num hash estável do raw body para que uma re-entrega seja no-op.

"Verifica HMAC e está" é o exemplo do README em todo o lado. Produção tem mais formatos.

Se o teu handler de webhook faz == em hex strings, troca por hmac.compare_digest antes do almoço. A win de segurança mais fácil que vais comprar.

Qual é o check de segurança que o teu código ainda não tem?

Repo: github.com/bilouro/eupago-python · Docs de segurança: eupago.bilouro.com/security

P.S. Novo post tech toda a quarta-feira aqui no LinkedIn.

#OpenSource #Python #SoftwareArchitecture

Comentários