Segurança
Verificação de assinatura e proteções no receptor.
Verificar assinatura
Compute HMAC-SHA256 sobre o body bruto usando o secret e compare com X-DF-Webhook-Signature usando comparação timing-safe (constant time). NUNCA use comparação simples ===.
javascript
import crypto from "node:crypto";
function verifyWebhook(payload, signatureHeader, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signatureHeader),
Buffer.from(expected),
);
}Allowlist no receptor
Recomendamos restringir o endpoint receptor a IPs do DeFlow (consulte /developers para a lista atualizada).
HTTPS obrigatório
URLs HTTP são rejeitadas. Use HTTPS com certificado válido.
Rate limit no receptor
Implemente rate limit no receptor para evitar amplificação em caso de retries cascateados.
Proteção contra replay
Cada evento traz timestamp. Rejeite eventos com timestamp mais antigo que 5 minutos para mitigar replays.
