# Sécurité

> Vérifiez l’authenticité des webhooks

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

Vérifiez que chaque requête de webhook provient bien de Firecrawl en vérifiant sa signature HMAC-SHA256. Cela empêche les attaquants d’usurper des payloads et vous permet d’avoir confiance dans les données avant d’agir en conséquence.

<div id="secret-key">
  ## Clé secrète
</div>

Le secret de votre webhook est disponible dans l’[onglet Avancé](https://www.firecrawl.dev/app/settings?tab=advanced) des paramètres de votre compte. Chaque compte dispose d’un secret unique utilisé pour signer toutes les requêtes webhook.

<Warning>
  Gardez le secret de votre webhook en lieu sûr et ne l’exposez jamais publiquement. Si vous pensez
  que votre secret a été compromis, régénérez-le immédiatement depuis les paramètres
  de votre compte.
</Warning>

<div id="signature-verification">
  ## Vérification de la signature
</div>

Chaque requête de webhook inclut un en-tête `X-Firecrawl-Signature` :

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


<div id="how-to-verify">
  ### Comment vérifier
</div>

1. Extraire la signature de l’en-tête `X-Firecrawl-Signature`
2. Récupérer le corps brut de la requête (ne le parsez pas au préalable)
3. Calculer le HMAC-SHA256 avec votre clé secrète
4. Comparer les signatures à l’aide d’une fonction de comparaison à durée constante

<div id="implementation">
  ### Implémentation
</div>

<CodeGroup>

<WebhookSignatureJS />

<WebhookSignaturePython />

</CodeGroup>

<div id="best-practices">
  ## Bonnes pratiques
</div>

* **Vérifiez chaque requête.** Vérifiez toujours la signature avant de traiter un payload de webhook. Rejetez toute requête qui échoue à la vérification avec un code d’état `401`.
* **Utilisez des comparaisons à durée constante.** La comparaison de chaînes standard peut révéler des informations temporelles. Utilisez `crypto.timingSafeEqual()` dans Node.js ou `hmac.compare_digest()` en Python.
* **Exposez votre point de terminaison en HTTPS.** Cela garantit que les payloads de webhook sont chiffrés pendant le transit.
