Webhook(外部サービスからの通知の宛先)とは
Webhookとは、決済・メール配信・外部SaaSなどのサービス側でイベント(入金完了、配信失敗、フォーム送信など)が起きたときに、あらかじめ登録したURLへHTTPリクエストを送って通知する仕組みです。宛先URLは外部サービスの管理画面に登録されているため、サイトを引き継いでも登録を変えなければ通知は旧オーナーのサーバーへ届き続けます。
Stripeで決済が完了した、Shopifyで注文が入った、SendGridでメールが届かなかった、GitHubにコミットが積まれた。こうした出来事を自分のシステムが知る手段がWebhookです。外部サービスは登録されたURLに向けてイベントの内容をPOSTし、受け取った側はそれをもとに注文処理や通知を行います。便利な反面、設定が自分のコードの外(相手側の管理画面)にあるため、コードとサーバーを丸ごと引き継いでも、Webhookの登録を見落とすと事業が静かに壊れます。
引き継ぎで起きる典型的な事故は、①宛先が旧オーナーのサーバーのまま残り、新サーバーには入金の通知が届かない(顧客は払ったのに商品が届かない)、②旧サーバーが止まった後もWebhookが送られ続け、外部サービス側でエラーが蓄積して自動停止される、③署名検証のシークレットが旧オーナーの環境変数にあり、新サーバーで検証が通らない、④旧オーナーが自分のサーバーに届き続ける通知から顧客情報を見られる状態が続く、の4つです。Webhookはたいてい複数(決済・配信・認証・監視)あり、しかもどこに登録したかは登録した人しか知りません。
技術デューデリジェンスでは、コード中のWebhook受信エンドポイント(署名検証の有無を含む)を洗い出し、それに対応する外部サービス側の登録を一覧化して、資産移管チェックリストの項目にします。署名検証はシークレットの受け渡しと再発行を伴うため、鍵のローテーションと同じ扱いです。RIKKA M&Aの技術DDはリポジトリ中の外部依存とシークレットの扱いを検査し、譲渡準備チェックの「APIキー」「外部SaaS」の軸は、こうした外部サービスとの接続点が名義ごと移管できるかを問うものです。