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.