本文へスキップ

Webhook と連携

Webhook の署名を検証する

署名は、JSON を解析する前の生のリクエストボディに対して計算し、定数時間で比較してください。ペイロードを再直列化するとバイト列が変わり、署名は二度と一致しません。

手順

  1. 生のボディをバイト列として捕まえます。多くのフレームワークは既定で解析済みのオブジェクトを渡しますが、それではもう遅すぎます。
  2. そのバイト列そのものに対して、自分のエンドポイントのシークレットで署名を計算します。
  3. 文字列の等価比較ではなく、定数時間の比較で照合します。
  4. 署名が検証できてから、はじめて JSON を解析します。
  5. 通らないものは拒否し、ボディではなく配信IDをログに残します。

結果の確かめ方

本物の配信は検証を通り、同じペイロードで1文字だけ変えたものは通りません。

よくある落とし穴

  • 署名を計算する前に解析して再直列化してしまう。
  • ハンドラより先にストリームを読み切ってしまうボディ解析のミドルウェア。
  • 署名に対する素朴な ===。処理時間から漏れます。
この記事で解決しましたか

解決しなかった場合

プラットフォームとバージョン、実行した手順、期待した結果、対象のワークスペースまたはQRコードを添えてご連絡ください。添付の前に、秘密情報はすべて伏せてください。

サポートに連絡する