Personalizando a Proteção de Teste de Cartão do Stripe no WPForms

WPForms 2.0 introduziu 3 camadas de proteção automáticas que detectam e bloqueiam ataques de teste de cartão contra a integração Stripe integrada: detecção de pico de baixo valor, um limite de taxa em todo o site e telemetria de sessão do Stripe Radar. Teste de cartão (também chamado de carding) é um ataque onde scripts testam números de cartão roubados com pequenas cobranças para encontrar aqueles que funcionam.

As proteções são executadas automaticamente com padrões ajustados e não possuem interface de configurações. Cada limite e comportamento é controlado por meio dos filtros PHP documentados nesta página. Se você estiver procurando por instruções gerais de configuração do Stripe, consulte nossa documentação do Stripe.

Requisitos:

  • WPForms 2.0 ou posterior. As proteções se aplicam a pagamentos Stripe em ambas as versões, gratuita e paga.
  • Por padrão, as proteções são executadas apenas em pagamentos em modo ativo. Pagamentos em modo de teste do Stripe as ignoram, a menos que você opte por ativá-las com o filtro wpforms_stripe_run_protections_in_test_mode.

Como as Proteções Funcionam

  • Detecção de Pico de Baixo Valor: Conta as tentativas de pagamento Stripe em ou abaixo de um valor limite (padrão de US$ 3,00) em todo o site em uma janela deslizante. Quando a contagem excede o limite, todos os pagamentos Stripe de baixo valor são bloqueados por um determinado período. Pagamentos acima do limite continuam processando. O WPForms envia 1 e-mail ao administrador do site e exibe um aviso de administrador dispensável por período de bloqueio.
  • Limite de Taxa Global: Conta as tentativas de cartão com falha (erros CardException do Stripe) em todos os visitantes do site. Quando as falhas excedem o limite, todos os pagamentos Stripe são bloqueados até que a janela expire. Isso estende o limite de taxa por IP que vem com o WPForms desde a versão 1.8.2, e os 2 limites funcionam independentemente.
  • Sessões do Stripe Radar: Cria uma sessão do Radar quando um formulário Stripe é carregado e a anexa ao método de pagamento. Isso alimenta sinais comportamentais no próprio mecanismo de fraude do Stripe, tornando sua pontuação de risco mais precisa. É telemetria passiva sem limites e sem bloqueios no lado do WPForms.

Quando um pagamento é bloqueado pela detecção de pico, o cliente vê "O processamento do pagamento está temporariamente indisponível. Por favor, tente novamente mais tarde ou entre em contato com o proprietário do site." Quando o limite de taxa global bloqueia pagamentos, o cliente vê "Não foi possível processar o pagamento, por favor, tente novamente mais tarde." Os bloqueios são removidos automaticamente quando sua duração expira.

Filtros de Detecção de Pico de Baixo Valor

FiltroTipoPadrãoDescrição
wpforms_stripe_low_amount_surge_enabledboolverdadeiroAtiva ou desativa a detecção de pico.
wpforms_stripe_low_amount_thresholdfloat3.00Limite superior de valor. Pagamentos neste valor ou abaixo dele contam para o pico e são bloqueados enquanto um bloqueio está ativo.
wpforms_stripe_low_amount_surge_countint10Número de tentativas de baixo valor dentro da janela que acionam um bloqueio.
wpforms_stripe_low_amount_surge_windowint120Duração da janela deslizante em segundos.
wpforms_stripe_low_amount_block_durationintHORA_EM_SEGUNDOSDuração do bloqueio, em segundos.
wpforms_stripe_low_amount_surge_email_tostringget_option( 'admin_email' )Destinatário do e-mail de alerta de teste de cartão.

Por exemplo, um site de doações movimentado que recebe legitimamente muitos pagamentos pequenos pode querer uma contagem de surto maior e um bloqueio mais curto:

// 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]';
} );

Observação: O estado de surto é armazenado nos transientes wpforms_stripe_low_amount_counter, wpforms_stripe_low_amount_block e wpforms_stripe_low_amount_notified. Se você alterar esses valores de filtro enquanto um bloqueio estiver ativo, exclua os transientes para que os novos valores entrem em vigor imediatamente.

Filtros Globais de Taxa Limite

FiltroTipoPadrãoDescrição
wpforms_stripe_rate_limit_global_enabledboolverdadeiroAtiva ou desativa o limite de taxa em todo o site.
wpforms_stripe_rate_limit_global_allowed_attemptsint50Número de tentativas de cartão com falha em todo o site antes que todos os pagamentos do Stripe sejam bloqueados.
wpforms_stripe_rate_limit_global_expires_inintHORA_EM_SEGUNDOSDuração da janela de contagem e do bloqueio, em segundos.

O limite de taxa por IP pré-existente mantém seus próprios filtros e não é afetado pelo escopo global: wpforms_stripe_rate_limit_allowed_attempts (padrão 3) e wpforms_stripe_rate_limit_expires_in (padrão de 6 horas).

Por exemplo, para aumentar o limite global em uma loja de alto tráfego:

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

Filtro de Sessão do Stripe Radar

As sessões do Radar enviam telemetria comportamental da página de pagamento para o Stripe Radar, o motor de prevenção de fraudes do Stripe. O WPForms cria a sessão ao carregar o formulário nos fluxos do Card Element e Payment Element e a anexa ao método de pagamento que ele cria. A chamada é de melhor esforço: se a API do Radar estiver indisponível, o pagamento prossegue normalmente sem uma sessão.

FiltroTipoPadrãoDescrição
wpforms_stripe_radar_session_enabledboolverdadeiroAtiva ou desativa a criação de sessão do Radar.
// Disable Radar session telemetry.
add_filter( 'wpforms_stripe_radar_session_enabled', '__return_false' );

Observação: O Stripe não anexa sessões do Radar a pagamentos concluídos através do Stripe Link. Esta é uma limitação da plataforma Stripe, não uma configuração do WPForms.

Testando as Proteções no Modo de Teste do Stripe

As proteções pulam o modo de teste do Stripe por padrão para que fluxos de trabalho normais de desenvolvimento não sejam afetados por falsos positivos. Para exercitá-las em modo de teste, opte por participar e diminua os limites para que os bloqueios sejam acionados rapidamente:

// 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;
} );

Com esses filtros ativos, envie 3 pagamentos de R$ 2 ou menos usando um cartão de teste do Stripe. A 3ª tentativa é bloqueada, o e-mail de alerta é enviado e o aviso de administrador aparece. Um pagamento acima do limite ainda é processado durante o bloqueio. Veja nosso guia para testar pagamentos do Stripe para configurar o modo de teste e os cartões de teste.

Se um bloqueio de um teste anterior ainda estiver ativo após você alterar os valores do filtro, limpe o estado armazenado com 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