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