WPFormsのStripeカードテスト保護のカスタマイズ

WPForms 2.0 では、組み込みの Stripe 連携に対するカードテスト攻撃を検出しブロックする 3 つの自動保護レイヤーが導入されました。低額サージ検出、サイト全体のレートキャップ、Stripe Radar セッションテレメトリです。カードテスト(カーディングとも呼ばれます)は、スクリプトが盗まれたカード番号を小額請求でプローブして、機能するものを見つける攻撃です。

保護は調整済みのデフォルト設定で自動的に実行され、設定 UI はありません。すべてのしきい値と動作は、このページで文書化されている PHP フィルターを通じて制御されます。代わりに一般的な Stripe セットアップ手順をお探しの場合は、Stripe ドキュメントを参照してください。

要件:

  • WPForms 2.0 以降。保護は、無料版と有料版の両方の Stripe 支払いに対して適用されます。
  • デフォルトでは、保護はライブモードの支払いでのみ実行されます。Stripe テストモードの支払いは、wpforms_stripe_run_protections_in_test_mode フィルターでオプトインしない限り、これらをスキップします。

保護の仕組み

  • 低額サージ検出: スライディングウィンドウ全体で、サイト全体でしきい値金額(デフォルト $3.00)以下の Stripe 支払い試行をカウントします。カウントが制限を超えると、すべての低額 Stripe 支払いが一定期間ブロックされます。しきい値を超える支払いは処理され続けます。WPForms はサイト管理者に 1 つのメールを送信し、ブロック期間ごとに解除可能な管理者通知を表示します。
  • グローバルレートキャップ: すべての訪問者のサイト全体で、失敗したカード試行(Stripe CardException エラー)をカウントします。失敗がキャップを超えると、ウィンドウが期限切れになるまで、すべての Stripe 支払いがブロックされます。これは、WPForms 1.8.2 以降に出荷されている IP ごとのレート制限を拡張するもので、2 つの制限は独立して機能します。
  • Stripe Radar セッション: Stripe フォームが読み込まれるときに Radar セッションを作成し、支払い方法にアタッチします。これにより、Stripe 独自の不正防止エンジンに動作シグナルがフィードされ、リスクスコアリングが向上します。これは、しきい値がなく、WPForms 側でブロックもないパッシブテレメトリです。

サージ検出によって支払いがブロックされると、顧客には「支払いの処理が一時的に利用できません。後でもう一度お試しいただくか、サイト所有者にお問い合わせください。」と表示されます。グローバルレートキャップが支払いをブロックすると、顧客には「支払いを処理できません。後でもう一度お試しください。」と表示されます。ブロックは、期間が終了すると自動的に解除されます。

低額サージ検出フィルター

フィルタータイプデフォルト説明
wpforms_stripe_low_amount_surge_enabledブール値trueサージ検出をオンまたはオフにします。
wpforms_stripe_low_amount_thresholdfloat3.00金額の上限。この金額以下の支払いはサージとしてカウントされ、ブロックがアクティブな間はブロックされます。
wpforms_stripe_low_amount_surge_countint10ブロックをトリガーするウィンドウ内の低額試行の数。
wpforms_stripe_low_amount_surge_windowint120ウィンドウの長さ(秒)。
wpforms_stripe_low_amount_block_durationint秒単位の時間ブロックの持続時間(秒)。
wpforms_stripe_low_amount_surge_email_to文字列get_option( 'admin_email' )カードテストアラートメールの受信者。

例えば、少額決済を多数 legitimately に受け取る、忙しい寄付サイトでは、サージカウントを高くし、ブロック時間を短くしたい場合があります。

// Allow 30 low-amount attempts per window before blocking.
add_filter( 'wpforms_stripe_low_amount_surge_count', function () {
	return 30;
} );

// Shorten the block from 1 hour to 15 minutes.
add_filter( 'wpforms_stripe_low_amount_block_duration', function () {
	return 15 * MINUTE_IN_SECONDS;
} );

// Send the alert email to a dedicated inbox.
add_filter( 'wpforms_stripe_low_amount_surge_email_to', function () {
	return '[email protected]';
} );

注意: サージ状態は、wpforms_stripe_low_amount_counterwpforms_stripe_low_amount_block、および wpforms_stripe_low_amount_notified のトランジェントに保存されます。ブロックがアクティブな間にこれらのフィルター値を変更する場合は、トランジェントを削除して、新しい値がすぐに有効になるようにしてください。

グローバルレートキャップフィルター

フィルタータイプデフォルト説明
wpforms_stripe_rate_limit_global_enabledブール値trueサイト全体のレートキャップをオンまたはオフにします。
wpforms_stripe_rate_limit_global_allowed_attemptsint50サイト全体で失敗したカード試行の回数。この回数を超えると、すべてのStripe決済がブロックされます。
wpforms_stripe_rate_limit_global_expires_inint秒単位の時間カウントウィンドウとブロックの長さ(秒単位)。

既存のIPごとのレート制限は、独自のフィルターを維持し、グローバルスコープの影響を受けません。wpforms_stripe_rate_limit_allowed_attempts(デフォルト3)およびwpforms_stripe_rate_limit_expires_in(デフォルト6時間)。

例えば、高トラフィックのストアでグローバルキャップを引き上げる場合:

// Allow 200 failed card attempts per hour site-wide before blocking.
add_filter( 'wpforms_stripe_rate_limit_global_allowed_attempts', function () {
	return 200;
} );

Stripe Radar セッションフィルター

Radar セッションは、決済ページからStripeの不正防止エンジンであるStripe Radarにビヘイビアルテレメトリを送信します。WPFormsは、カード要素と決済要素の両方のフローでフォームの読み込み時にセッションを作成し、作成した決済方法にアタッチします。この呼び出しはベストエフォートです。Radar APIが利用できない場合、セッションなしで決済は通常どおり進行します。

フィルタータイプデフォルト説明
wpforms_stripe_radar_session_enabledブール値trueRadar セッションの作成をオンまたはオフにします。
// Disable Radar session telemetry.
add_filter( 'wpforms_stripe_radar_session_enabled', '__return_false' );

注意: Stripeは、Stripe Link を介して完了した決済にRadarセッションをアタッチしません。これはStripeプラットフォームの制限であり、WPFormsの設定ではありません。

Stripeテストモードでの保護機能のテスト

保護機能はデフォルトでStripeテストモードをスキップするため、誤検知によって通常の開発ワークフローが影響を受けることはありません。テストモードでこれらを行使するには、オプトインしてしきい値を下げ、ブロックが迅速にトリガーされるようにします。

// Run the protections in Stripe test mode.
add_filter( 'wpforms_stripe_run_protections_in_test_mode', '__return_true' );

// Trigger the surge block on the 3rd low-amount attempt.
add_filter( 'wpforms_stripe_low_amount_surge_count', function () {
	return 2;
} );

// Auto-unblock after 30 seconds for fast retries.
add_filter( 'wpforms_stripe_low_amount_block_duration', function () {
	return 30;
} );

これらのフィルターがアクティブな状態で、Stripeテストカードを使用して2ドル以下の決済を3回送信します。3回目の試行がブロックされ、アラートメールが送信され、管理者の通知が表示されます。ブロック中にしきい値を超える決済は引き続き処理されます。テストモードとテストカードの設定については、Stripe決済のテストガイドをご覧ください。

以前のテストによるブロックがフィルター値を変更した後もアクティブな場合は、WP-CLIを使用して保存された状態をクリアしてください。

wp transient delete wpforms_stripe_low_amount_block
wp transient delete wpforms_stripe_low_amount_counter
wp transient delete wpforms_stripe_low_amount_notified