AI要約
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_threshold | float | 3.00 | 金額の上限。この金額以下の支払いはサージとしてカウントされ、ブロックがアクティブな間はブロックされます。 |
wpforms_stripe_low_amount_surge_count | int | 10 | ブロックをトリガーするウィンドウ内の低額試行の数。 |
wpforms_stripe_low_amount_surge_window | int | 120 | ウィンドウの長さ(秒)。 |
wpforms_stripe_low_amount_block_duration | int | 秒単位の時間 | ブロックの持続時間(秒)。 |
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_counter、wpforms_stripe_low_amount_block、および wpforms_stripe_low_amount_notified のトランジェントに保存されます。ブロックがアクティブな間にこれらのフィルター値を変更する場合は、トランジェントを削除して、新しい値がすぐに有効になるようにしてください。
グローバルレートキャップフィルター
| フィルター | タイプ | デフォルト | 説明 |
|---|---|---|---|
wpforms_stripe_rate_limit_global_enabled | ブール値 | true | サイト全体のレートキャップをオンまたはオフにします。 |
wpforms_stripe_rate_limit_global_allowed_attempts | int | 50 | サイト全体で失敗したカード試行の回数。この回数を超えると、すべてのStripe決済がブロックされます。 |
wpforms_stripe_rate_limit_global_expires_in | int | 秒単位の時間 | カウントウィンドウとブロックの長さ(秒単位)。 |
既存の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 | ブール値 | true | Radar セッションの作成をオンまたはオフにします。 |
// 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
関連
- WPFormsでStripeアドオンをインストールして使用する方法
- Stripe決済のテスト
- WPFormsの決済フィールドタイプの完全ガイド(最小価格オプションを参照。低額カードテストを収益性のないものにする推奨される防御策)
- Stripe Radar ドキュメント