外部サービスとシステムを連携するときによく利用されるのがWebhookです。
例えば、
- 決済完了を受け取る
- 予約完了を受け取る
- 問い合わせ発生を通知する
- GitHubなどの更新イベントを受け取る
- SaaS上のデータ変更を業務システムへ反映する
- AI処理の完了通知を受け取る
といった用途があります。
Webhookは便利な一方、インターネット上に受信用URLを公開することが多いため、セキュリティ設計を誤ると、
- 第三者から偽のWebhookを送信される
- 同じWebhookを何度も実行される
- 再送によって二重登録・二重決済が発生する
- Webhookのシークレットが漏れる
- 大量リクエストによってシステム負荷が上がる
といった問題につながります。
結論からいうと、Webhookのセキュリティでは、
「送信元が本物か確認する署名検証」と「同じイベントを複数回処理しない冪等性」を中心に設計すること
が重要です。
さらに、
- HTTPS
- タイムスタンプ検証
- リプレイ攻撃対策
- Webhook ID・イベントIDの重複チェック
- シークレット管理
- レート制限
- 非同期処理
- ログ・監視
などを組み合わせます。
この記事では、Webhookを本番の業務システムで利用するときに押さえておきたいセキュリティ対策と再送設計について、具体例を交えて解説します。
Webhookとは
Webhookとは、あるサービス上でイベントが発生したときに、別のシステムへHTTPリクエストを送信して通知する仕組みです。
例えばオンライン決済を考えてみましょう。
ユーザーが決済すると、
“`text
ユーザー
↓
決済サービス
↓
決済完了
↓
Webhook送信
↓
自社システム
↓
注文を「支払済み」に変更