# Segurança

> Verifique a autenticidade de webhooks

import WebhookSignatureJS from '/snippets/pt-BR/v2/webhook-signature/js.mdx';
import WebhookSignaturePython from '/snippets/pt-BR/v2/webhook-signature/python.mdx';

Verifique se cada requisição de webhook realmente veio do Firecrawl conferindo sua assinatura HMAC-SHA256. Isso impede que invasores falsifiquem payloads e permite que você confie nos dados antes de agir com base neles.

<div id="secret-key">
  ## Chave secreta
</div>

Seu segredo de webhook está disponível na [aba Advanced](https://www.firecrawl.dev/app/settings?tab=advanced) das configurações da sua conta. Cada conta tem um segredo exclusivo usado para assinar todas as solicitações de webhook.

<Warning>
  Mantenha seu segredo de webhook em segurança e nunca o exponha publicamente. Se você acreditar que seu segredo foi comprometido, gere um novo imediatamente nas configurações da sua conta.
</Warning>

<div id="signature-verification">
  ## Verificação de assinatura
</div>

Cada requisição de webhook inclui um cabeçalho `X-Firecrawl-Signature`:

```
X-Firecrawl-Signature: sha256=abc123def456...
```


<div id="how-to-verify">
  ### Como verificar
</div>

1. Extraia a assinatura do cabeçalho `X-Firecrawl-Signature`
2. Obtenha o corpo bruto da requisição exatamente como recebido (não faça parsing antes)
3. Calcule o HMAC-SHA256 usando sua chave secreta
4. Compare as assinaturas usando uma função de comparação segura a timing (timing-safe)

<div id="implementation">
  ### Implementação
</div>

<CodeGroup>

<WebhookSignatureJS />

<WebhookSignaturePython />

</CodeGroup>

<div id="best-practices">
  ## Boas práticas
</div>

* **Verifique cada requisição.** Sempre verifique a assinatura antes de processar um payload de webhook. Rejeite qualquer requisição que falhe na verificação com status `401`.
* **Use comparações seguras a timing.** Comparações padrão de strings podem revelar informações por tempo de execução. Use `crypto.timingSafeEqual()` no Node.js ou `hmac.compare_digest()` no Python.
* **Disponibilize seu endpoint via HTTPS.** Isso garante que os payloads de webhook sejam criptografados em trânsito.
