DEV Community 日本語 フォロー 有効なWebhook署名があっても、既に処理済みでないとは限りません。 Webhook は有効な署名を持っていても、重複している可能性があります。この違いは、Stripe Digital Seller Kit の無料サンプルを使用して調査されました。このサンプルには、Webhook 署名チェック用の PHP ファイルと、署名付きダウンロードリンクヘルパーが含まれています。ローカルテストは、実際の Stripe リクエストや支払いなしで PHP 8.5.4 で実施されました。コアの Webhook テストでは、verify_webhook 関数への両方の呼び出しがイベントを返したことが明らかになりました。これは、ボディと署名が一致し、タイムスタンプが許可された 5 分間のウィンドウ内であったために発生しました。提供された署名チェッカーは、以前に処理されたイベントのメモリを保持しません。ボディを変更したり、タイムスタンプ制限を超えたりすると、正しく拒否され、署名の整合性と新規性に対するチェックが実証されました。しかし、これらのチェックは重複イベントの処理を防ぐものではありません。重複の処理には、既に処理された注文を追跡するための別のメカニズムが必要です。2 つのリクエストが同時に到着した場合、どちらも書き込む前に先行するレコードがないと見なす可能性があるため、競合状態が発生する可能性があります。これを防ぐには、データベーストランザクションやファイルロックを使用して、処理のチェックと記録をアトミックに保護する必要があります。完全な Stripe Digital Seller Kit は、重複を安全に処理する注文処理を別途提供していると報告されていますが、この分析ではテストされていません。ダウンロードリンクヘルパーもテストされ、有効なトークン、無効な ID、間違ったシークレット、期限切れのリンクに対して正しい動作が検証されました。これらのテストでは、返金処理やダウンロード数などのより広範な機能はカバーされていません。著者は、混乱を避け、正しい重複処理を確実にするために、「無効な署名」とは別に「同じ有効なイベントを 2 回」テストすることを強調しています。 A valid webhook signature doesn't mean you haven't handled it already dev.to DEV Community 日本語 RSS thenote.app
verify_webhook関数への両方の呼び出しがイベントを返したことが明らかになりました。これは、ボディと署名が一致し、タイムスタンプが許可された 5 分間のウィンドウ内であったために発生しました。提供された署名チェッカーは、以前に処理されたイベントのメモリを保持しません。ボディを変更したり、タイムスタンプ制限を超えたりすると、正しく拒否され、署名の整合性と新規性に対するチェックが実証されました。しかし、これらのチェックは重複イベントの処理を防ぐものではありません。重複の処理には、既に処理された注文を追跡するための別のメカニズムが必要です。2 つのリクエストが同時に到着した場合、どちらも書き込む前に先行するレコードがないと見なす可能性があるため、競合状態が発生する可能性があります。これを防ぐには、データベーストランザクションやファイルロックを使用して、処理のチェックと記録をアトミックに保護する必要があります。完全な Stripe Digital Seller Kit は、重複を安全に処理する注文処理を別途提供していると報告されていますが、この分析ではテストされていません。ダウンロードリンクヘルパーもテストされ、有効なトークン、無効な ID、間違ったシークレット、期限切れのリンクに対して正しい動作が検証されました。これらのテストでは、返金処理やダウンロード数などのより広範な機能はカバーされていません。著者は、混乱を避け、正しい重複処理を確実にするために、「無効な署名」とは別に「同じ有効なイベントを 2 回」テストすることを強調しています。