Como limitar as tentativas de login no WordPress?
Por Eureka Studio · Atualizado em
Resposta rápida
O WordPress deixa qualquer pessoa adivinhar senhas para sempre. Para limitar as tentativas de login, use um plugin que conte os logins com falha por IP dentro de uma janela de tempo e bloqueie esse IP por um período: por exemplo, 8 falhas em 5 minutos significam 15 minutos de espera. Garanta que falhas de 2FA e de senhas da aplicação também contem e coloque seu próprio IP na lista de permissões.
Passo a passo
1Passo 1
Veja como é a adivinhação sem limites
Sem um limite, o WordPress responde a cada senha errada com o mesmo erro, quantas vezes for solicitado, e a mensagem padrão ainda confirma que o nome de usuário existe.

2Passo 2
Ative os Limites de Login e defina as regras
No WordPress, abra Hushfort → Limites e Restrições e ligue Ativar os limites de login. O padrão é 8 tentativas com falha em 5 minutos, seguidas de um bloqueio de 15 minutos; depois de 4 bloqueios em 24 horas, o bloqueio dura 1.440 minutos. Clique em Salvar alterações.

3Passo 3
Libere seu próprio IP e confira a origem do IP
Mais abaixo, defina a Origem do IP. "Automática (apenas cabeçalhos de proxy verificados)" serve para a maioria dos sites, inclusive os que estão atrás da Cloudflare. Depois, adicione o IP do seu escritório ou de casa em IPs na lista de permissões para nunca se trancar do lado de fora, e salve.

4Passo 4
Receba um e-mail quando um IP for bloqueado
Ligue o E-mail de alerta e informe um ou mais endereços, separados por vírgulas. A opção exige SMTP funcionando no site; sem ele, o Hushfort mantém a opção desligada e explica o motivo.

5Passo 5
Veja o limite em ação
Depois do número permitido de falhas, o IP é bloqueado em vez de ganhar outra tentativa. O Histórico lista cada bloqueio ativo com o nome de usuário tentado, o número de tentativas e quando o bloqueio termina, com um botão Desbloquear.
Por que isso importa
Um ataque de força bruta é pura paciência: tenta uma senha, erra, tenta a próxima. O WordPress não se importa. Ele responde a mil tentativas erradas do mesmo endereço com a mesma educação da primeira. Se uma conta tem uma senha fraca ou reutilizada, é só uma questão de tempo.
Um limite de login muda a conta. Se um IP só pode fazer um punhado de tentativas antes de ter de esperar quinze minutos, adivinhar uma senha razoável leva anos em vez de horas. Isso também poupa seu servidor de renderizar a página de login repetidamente para um bot.
O que ele não cobre sozinho. Invasores que controlam milhares de endereços IP podem enviar poucas tentativas de cada um. Por isso, um limite de login funciona melhor junto com o login em dois fatores, que torna inútil uma senha adivinhada sem o código.
Erros comuns
- Contar só o formulário de login. Senhas também podem ser testadas pelo
xmlrpc.php, pelas senhas da aplicação da API REST e na etapa do código de dois fatores. Se essas tentativas não contam para o limite, os invasores simplesmente as usam. Feche também o login via XML-RPC; veja como desativar o XML-RPC com segurança. - Ler o IP errado atrás de um proxy. Se o seu site está atrás da Cloudflare e o plugin lê o
endereço do proxy, um único bot pode bloquear todos os visitantes. Se, ao contrário, ele confia
cegamente no cabeçalho
X-Forwarded-For, um bot pode inventar um IP novo a cada requisição e nunca ser contado. A regra segura é confiar em cabeçalhos de proxy apenas quando a requisição realmente vem do proxy. - Bloqueios longos demais. Um bloqueio de 24 horas por três erros de digitação pune sua própria equipe. Mantenha o primeiro bloqueio curto e torne os bloqueios repetidos mais longos.
- Sem lista de permissões. Adicione seu IP fixo para que uma senha esquecida nunca tranque você do lado de fora.
Sem plugin
O WordPress tem um hook, wp_login_failed, que é disparado após cada login com falha. Você pode
contar as falhas com um transient e recusar logins quando a contagem for alta demais. Uma versão
mínima para um plugin obrigatório (must-use) (wp-content/mu-plugins/login-limit.php):
<?php
add_action( 'wp_login_failed', function () {
$key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
$n = (int) get_transient( $key );
set_transient( $key, $n + 1, 15 * MINUTE_IN_SECONDS );
} );
add_filter( 'authenticate', function ( $user ) {
$key = 'll_' . md5( $_SERVER['REMOTE_ADDR'] );
if ( (int) get_transient( $key ) >= 8 ) {
return new WP_Error( 'too_many', 'Too many failed attempts. Try again later.' );
}
return $user;
}, 30 );
Funciona, mas seja honesto sobre o que fica de fora: ele lê apenas o REMOTE_ADDR, então atrás de
um proxy conta o proxy; não conta como tentativas separadas os palpites feitos via multicall do
XML-RPC; não tem lista de permissões, nem e-mail de alerta, nem registro. Cada um desses itens é
mais código para escrever e manter.
Algumas hospedagens também oferecem ferramentas no nível do servidor, como o fail2ban monitorando o log de acesso. Isso é forte se a sua hospedagem o roda para você; em hospedagem compartilhada, normalmente você não consegue configurá-lo.
Se algo der errado
- Você se trancou do lado de fora. Espere o bloqueio terminar, tente de outra rede, como os dados móveis, ou peça a outro administrador para adicionar seu IP à lista de permissões.
- Todo mundo é bloqueado ao mesmo tempo. Seu site provavelmente está atrás de um proxy e o plugin está lendo o IP do proxy. Mude a configuração de origem do IP.
- Os bloqueios nunca acontecem. Verifique se a origem do IP confia em um cabeçalho que os bots conseguem falsificar. Se cada tentativa mostra um "IP" diferente, essa é a causa.
Para todos os caminhos de volta, veja Sem acesso depois de mudar a URL de login.
Com o Hushfort
Os Limites de Login fazem parte do Hushfort Pro, o complemento que funciona sobre o Hushfort Security, o plugin de segurança gratuito para WordPress.
A camada Limites de Login do Hushfort conta os logins com falha por IP (ou por IP e nome de usuário) dentro de uma janela de tempo que você escolhe e bloqueia o IP pelo tempo que você escolher. Bloqueios repetidos em 24 horas podem acionar um bloqueio estendido, mais longo.
- Códigos de dois fatores errados e logins com senha da aplicação que falham também contam, então não há porta lateral para a adivinhação.
- Cabeçalhos de proxy só são considerados quando a requisição realmente vem da Cloudflare ou de uma rede privada.
- Os e-mails de alerta vão para quantos endereços você listar.
- Cada tentativa com falha ou bloqueada aparece em um Histórico filtrável.
- A lista de permissões é compartilhada com todas as outras camadas do Hushfort, então você se adiciona uma única vez.
Desativar o Hushfort suspende todos os bloqueios existentes.
Perguntas frequentes
Quantas tentativas de login devo permitir?
O WordPress limita as tentativas de login por padrão?
Um limite de login pode me trancar fora do meu próprio site?
Limitar as tentativas de login basta para barrar a força bruta?
Por que os bloqueios atingem as pessoas erradas atrás da Cloudflare?
Tutoriais relacionados
Como ativar a autenticação de dois fatores (2FA) no WordPress?
Proteja o login com um código de qualquer app autenticador. Ative a 2FA no WordPress, guarde os códigos de recuperação e saiba o que fazer sem o celular.
Ver o passo a passoO que é o xmlrpc.php e como desativá-lo no WordPress?
O xmlrpc.php é uma segunda porta de login que ocultar a página de login não fecha. Veja como desativá-lo com segurança, manter pingbacks e testar.
Ver o passo a passoComo alterar a URL de login do WordPress e esconder o wp-admin?
Altere a URL de login do WordPress e esconda o wp-admin em cinco passos seguros. Teste antes de sair e saiba como voltar se esquecer o novo endereço.
Ver o passo a passo
