Rishidocs

Rate limit do checkout

2 min de leituraAtualizado há 1 hora

O rate limit protege o envio do pedido contra rajadas, loops e chamadas excessivas. Ele usa a tabela, o cache e o contador mantidos pelo próprio WooCommerce.

O recurso é desativado por padrão e não possui configuração no painel. Ative-o somente por código.

Ativar o limite padrão

O exemplo abaixo permite 3 tentativas a cada 60 segundos por identidade:

add_filter( 'wc_smart_checkout_rate_limit_options', function( $options ) {
  $options['enabled'] = true;

  return $options;
} );

Administradores com permissão para editar posts não são limitados, seguindo o comportamento usado pelo WooCommerce.

Alterar a janela

add_filter( 'wc_smart_checkout_rate_limit_options', function( $options ) {
  $options['enabled'] = true;
  $options['limit'] = 5;
  $options['seconds'] = 120;

  return $options;
} );
Opção Tipo Padrão Descrição
enabled bool false Ativa a proteção no envio do pedido
limit int 3 Tentativas permitidas dentro da janela
seconds int 60 Duração da janela em segundos
proxy_support bool false Permite considerar headers de IP encaminhados

Use inteiros maiores ou iguais a 1 em limit e seconds. O valor 0 é normalizado para 1.

Identificação do visitante

Usuários autenticados são agrupados pelo ID do usuário. Visitantes são agrupados por um hash do endereço IP.

Se a loja estiver atrás de um proxy, balanceador ou CDN confiável, ative o suporte correspondente:

add_filter( 'wc_smart_checkout_rate_limit_options', function( $options ) {
  $options['enabled'] = true;
  $options['proxy_support'] = true;

  return $options;
} );
Confirme a configuração do proxy

Ative proxy_support somente quando a infraestrutura sobrescrever os headers enviados pelo cliente. Caso contrário, um visitante pode falsificar o IP de origem.

Para substituir o agrupamento, use o filtro nativo do WooCommerce:

add_filter( 'woocommerce_store_api_rate_limit_id', function( $identifier ) {
  return $identifier;
} );

Headers e observabilidade

As respostas podem incluir:

  • RateLimit-Limit: máximo permitido na janela;
  • RateLimit-Remaining: tentativas restantes;
  • RateLimit-Reset: timestamp da próxima janela;
  • RateLimit-Retry-After: segundos até uma nova tentativa, quando bloqueado.

Quando o limite é excedido, o plugin dispara a action nativa woocommerce_store_api_rate_limit_exceeded, com o IP e a chave do contador.

Se a versão instalada do WooCommerce não disponibilizar o limitador usado pela Store API, o checkout continua funcionando, registra um warning no log do WooCommerce e dispara wc_smart_checkout_rate_limit_unavailable.

O que essa proteção não resolve

Rate limit não é um sistema antifraude

O limite reduz o volume por identidade, mas não impede card testing com rotação de IPs, contas ou sessões. Ele também conta envios do checkout antes de saber se houve uma autorização de cartão.

Para reduzir testes automatizados de cartões, combine o limite com as proteções do gateway, análise de recusas, CAPTCHA validado no servidor, 3DS e regras antifraude. Nunca envie ou armazene número, validade ou CVV para criar um fingerprint próprio; use somente identificadores seguros fornecidos pelo gateway.

Foi útil?