Segurança de Webhooks
Como validar que as notificações recebidas foram enviadas pelo Vero e não por um terceiro mal-intencionado.
Recomendado
Sempre valide a assinatura do webhook antes de processar qualquer alteração de estado no seu banco de dados ou libertar encomendas.
Cabeçalho X-Vero-Signature
Cada webhook enviado pelo Vero inclui um cabeçalho chamado X-Vero-Signature, no formato sha256=<hmac>. Esta assinatura é um HMAC-SHA256 gerado a partir do corpo cru (raw) do pedido e do teu Webhook Secret.
verify.ts
import crypto from 'crypto'
function verifyWebhook(rawBody: string, signatureHeader: string, secret: string) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex')
const a = Buffer.from(signatureHeader)
const b = Buffer.from(expected)
if (a.length !== b.length) return false
// timingSafeEqual evita ataques de temporização - nunca uses ===
return crypto.timingSafeEqual(a, b)
} Prevenção de Replay
Verifique se o timestamp do evento não tem mais de 5 minutos de diferença do tempo actual para evitar ataques de replay.