# セキュリティ

> Webhook の正当性を検証する

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

HMAC-SHA256 署名を確認して、各 webhook リクエストが実際に Firecrawl から送信されたものかを検証します。これにより、攻撃者によるペイロードの偽装を防ぎ、処理を実行する前にそのデータを信頼できるようになります。

<div id="secret-key">
  ## シークレットキー
</div>

webhook シークレットは、アカウント設定の[Advanced タブ](https://www.firecrawl.dev/app/settings?tab=advanced)で確認できます。各アカウントには、すべての webhook リクエストに署名するために使用される固有のシークレットが割り当てられています。

<Warning>
  webhook シークレットは厳重に管理し、決して公開しないでください。漏えいした可能性がある場合は、直ちにアカウント設定から再生成してください。
</Warning>

<div id="signature-verification">
  ## 署名の検証
</div>

各 webhook リクエストには、`X-Firecrawl-Signature` ヘッダーが含まれます：

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


<div id="how-to-verify">
  ### 検証方法
</div>

1. `X-Firecrawl-Signature` ヘッダーから署名を取り出す
2. パース前の生のリクエストボディを取得する
3. シークレットキーを使って HMAC-SHA256 を計算する
4. タイミングセーフな比較関数を使って署名を比較する

<div id="implementation">
  ### 実装
</div>

<CodeGroup>

<WebhookSignatureJS />

<WebhookSignaturePython />

</CodeGroup>

<div id="best-practices">
  ## ベストプラクティス
</div>

* **すべてのリクエストを確認してください。** webhook のペイロードを処理する前に、必ず署名を確認してください。確認に失敗したリクエストは、`401` ステータスで拒否してください。
* **タイミングセーフな比較を使う。** 標準的な文字列比較はタイミング情報を漏えいするおそれがあります。Node.js では `crypto.timingSafeEqual()` を、Python では `hmac.compare_digest()` を使ってください。
* **エンドポイントは HTTPS 経由で公開してください。** これにより、webhook のペイロードは転送中に暗号化されます。
