Ataques e força bruta

Como proteger a página de login do WordPress: o guia completo

Proteger a página de login do WordPress: o guia completo

Para proteger a página de login do WordPress, combine sete proteções nesta ordem: senhas longas e únicas, autenticação em dois fatores para as contas que publicam ou administram, um limite de tentativas de login, um endereço de login que não seja mais wp-login.php, XML-RPC desativado, nomes de usuário impossíveis de adivinhar e, por fim, um registro de logins. Cada uma bloqueia um ataque diferente; nenhuma basta sozinha. Este guia mostra a ordem de prioridade, as configurações para cada tipo de site e como evitar ficar trancado do lado de fora.

Já dedicamos um artigo a cada medida. Este é a visão geral: por onde começar, o que combinar e o que ignorar conforme o seu site.

Por que o login é a porta mais atacada

O formulário de login é idêntico em todos os sites WordPress, no mesmo endereço, e o WordPress não limita o número de tentativas por padrão. Um robô de força bruta não precisa pesquisar nada: ele envia pares de usuário e senha tirados de dicionários ou de vazamentos de dados, milhares de vezes por dia. Ele não mira o seu site em particular, mira todos os sites.

O login não tem uma porta só. Estas são as entradas que os robôs tentam e a defesa que fecha cada uma:

EntradaO que o robô tentaDefesa principal
wp-login.phpTentativas de senha em sérieLimite de tentativas, 2FA, endereço alterado
xmlrpc.phpCentenas de tentativas por requisição (system.multicall)Fechar o XML-RPC
/?author=1, /wp-json/wp/v2/usersColetar os nomes de usuárioOcultar os autores
Senha esquecidaInundar de e-mails, testar endereçosLimite, endereço alterado
Senhas de aplicativoContornar a 2FA pela APIDesativá-las se não forem usadas
As cinco entradas de autenticação que um site WordPress expõe por padrão.

As sete medidas, por ordem de prioridade

A ordem segue a relação entre o esforço e o risco evitado. As duas primeiras protegem até contra um atacante que conhece o seu endereço de login e o seu nome de usuário; as seguintes reduzem o volume de ataques e o que os robôs descobrem sobre o seu site.

MedidaBloqueiaEsforçoPrioridade
Senhas longas e únicasDicionários, vazamentosBaixo1
Autenticação em dois fatoresSenha roubada ou adivinhadaMédio1
Limite de tentativasForça bruta repetidaBaixo2
Endereço de login alteradoRobôs genéricos, ruídoBaixo2
XML-RPC fechadoTentativas agrupadasBaixo2
Nomes de usuário ocultosIdentificação das contasBaixo3
Registro de loginsAtaques que passam despercebidosBaixo3
Prioridade 1: faça hoje mesmo. Prioridade 3: faça quando o resto estiver no lugar.
As camadas de proteção do login do WordPress, de fora para dentro: endereço alterado e XML-RPC fechado contra robôs genéricos, limite de tentativas contra força bruta, senha longa e única contra dicionários e vazamentos, autenticação em dois fatores contra uma senha roubada, registro de logins para identificar o que passou.
Cada camada detém um tipo de ataque diferente.

1. Senhas longas, únicas e nunca reutilizadas

O NIST, na recomendação SP 800-63B revisada em 2025, pede pelo menos 15 caracteres para uma senha usada sozinha, nenhuma regra de composição obrigatória e uma verificação contra listas de senhas já vazadas. O verdadeiro perigo é a reutilização: uma senha que vazou em outro lugar será testada no seu site, é o credential stuffing. Um gerenciador de senhas resolve o problema para toda a equipe. Desde o WordPress 6.8, as senhas são armazenadas com bcrypt, o que atrasa um atacante que roube o banco de dados, mas não protege uma senha fraca digitada no formulário.

2. Autenticação em dois fatores para as contas sensíveis

Com um código de uso único gerado por um aplicativo (TOTP), uma senha roubada não basta mais. O WordPress não traz esse recurso: você precisa de um plugin. Torne-a obrigatória para administradores e editores, gere códigos de backup e desconfie de códigos por SMS ou e-mail, mais fáceis de interceptar. Os métodos em detalhe, chaves de acesso incluídas, estão no nosso guia para escolher e implantar a autenticação em dois fatores.

3. Limitar as tentativas de login

Bloquear um endereço IP depois de algumas falhas deixa a força bruta lenta demais para dar certo. A configuração habitual: 5 falhas em 15 minutos, depois um bloqueio que aumenta em caso de reincidência. Duas armadilhas: atrás do Cloudflare ou de um proxy, o plugin precisa ler o endereço real do visitante, senão bloqueia todo mundo; e um bloqueio por nome de usuário em vez de por IP permite que qualquer pessoa trave a sua conta. Limites e falsos positivos estão explicados em como limitar as tentativas de login.

4. Mudar o endereço de login

Quando wp-login.php responde 404, os robôs genéricos passam para o próximo site: menos carga, logs legíveis. A medida não protege uma conta cuja senha vazou, ela reduz o volume. Para que funcione, /wp-admin/ não pode redirecionar visitantes anônimos para o novo endereço, e a página de login precisa ficar fora do cache. As armadilhas (WooCommerce, senha perdida, cache) estão em mudar o endereço do wp-login.php.

5. Fechar o XML-RPC e os acessos que você não usa

xmlrpc.php aceita centenas de tentativas de senha em uma única requisição. Se você não usa o Jetpack nem um aplicativo de publicação antigo, feche-o por completo (veja desativar o XML-RPC). Faça a mesma triagem com as senhas de aplicativo: elas abrem a API REST sem autenticação em dois fatores, úteis para uma integração, inúteis no resto dos casos.

6. Não entregar os nomes de usuário de bandeja

Por padrão, /?author=1 redireciona para um endereço que contém o nome de usuário do autor, a API REST lista os autores e a mensagem de erro do login informa se um nome de usuário existe. Um atacante que conhece o nome de usuário só precisa adivinhar a senha. Use um nome de usuário de login diferente do nome exibido e oculte os autores (veja impedir a enumeração de usuários).

7. Manter um registro dos logins

Um registro dos logins bem-sucedidos e com falha, com endereço IP e horário, aponta o que as outras medidas não barraram: um login de administrador às 3 da manhã a partir de um país desconhecido, uma conta criada sem motivo. Em um site pequeno, um alerta por e-mail a cada login de administrador é suficiente.

O caminho de uma tentativa de login

Cada camada detém um tipo de atacante diferente. A animação acompanha três visitantes: um robô genérico, um atacante que conhece o novo endereço e você.

Caminho de três tentativas de login através das proteções Um robô genérico para no endereço de login alterado, que responde 404. Um atacante que conhece o endereço é bloqueado pelo limite de tentativas depois de várias falhas. O dono do site passa pela senha, depois pelo código de autenticação em dois fatores, e chega ao painel. Endereçoalterado Tentativaslimitadas Senhalonga, única Código 2FAvia app Painel doWordPress Robô genérico Ataque dirigido Você 404 Bloqueado Acesso Caminho de três tentativas de login através das proteçõesUm robô genérico para no endereço de login alterado, que responde 404. Um atacante que conhece o endereço é bloqueado pelo limite de tentativas depois de várias falhas. O dono do site passa pela senha, depois pelo código de autenticação em dois fatores, e chega ao painel.1Endereço alterado2Tentativas limitadas3Senha longa, única4Código 2FA via appRobô genérico1234404Ataque dirigido1234BloqueadoVocê1234Painel doWordPressAcesso
Cada camada detém um perfil de atacante diferente: é a combinação delas que protege.

Qual configuração para qual site?

Nem todas as medidas pesam igual em todos os sites. Comece pela linha que mais se parece com o seu:

Tipo de siteIndispensávelRecomendadoAtenção a
Blog, um único administradorSenha única, 2FAEndereço alterado, XML-RPC fechadoGuardar os códigos de backup
Site de empresa, vários autores2FA obrigatória por função, limiteRegistro de logins, autores ocultosContas de antigos prestadores de serviço
Loja WooCommerce2FA para a equipe, limiteEndereço de administração alteradoO login de clientes em “Minha conta” continua público
Agência, muitos sites2FA, limite, contas nominaisMesma configuração exportada para todos os sitesNenhum usuário compartilhado entre colegas
Em uma loja, o formulário de clientes precisa continuar acessível: proteja-o com o limite de tentativas, não escondendo-o.

Os erros que trancam você do lado de fora

  • Esquecer o novo endereço: salve-o no seu gerenciador de senhas antes de ativá-lo e teste-o em uma janela anônima.
  • Perder o celular da 2FA sem códigos de backup: imprima-os ou guarde-os no cofre de senhas da equipe.
  • Bloquear a si mesmo com o limite de tentativas atrás de um proxy mal configurado: confira no registro se o endereço gravado é mesmo o seu.
  • Colocar a página de login em cache: o token do formulário expira e ninguém mais consegue entrar. Exclua-a de qualquer regra de cache.
  • Empilhar dois plugins que mudam o login ou limitam as tentativas: eles se contradizem. Um só por função.

Mantenha sempre uma porta de emergência: um acesso FTP ou SFTP ao wp-config.php. A maioria dos plugins de segurança oferece uma constante que os suspende enquanto você retoma o controle. Para ir além no servidor (proteger o wp-admin por endereço IP ou senha HTTP), veja proteger o wp-admin no nível do servidor.

O login com o WP Masquerade

O WP Masquerade cobre a maioria dessas medidas em uma única configuração, sem mexer nos arquivos do núcleo:

  • Versão gratuita: endereço de login personalizado, testado antes da ativação; wp-login.php e wp-admin invisíveis para visitantes não conectados; XML-RPC e pingbacks bloqueados; contagem dos robôs que procuram falhas.
  • Pro: limite de tentativas de login, autenticação em dois fatores por aplicativo com códigos de backup e obrigatoriedade por função, autores ocultos (/?author=, API REST, sitemaps), registro de atividades dos administradores e alertas por e-mail.
  • Emergência: a linha define('CMS_MASQUERADE_DISABLE', true); no wp-config.php suspende todas as transformações e devolve o wp-login.php; define('CMP_DISABLE_2FA', true); suspende a autenticação em dois fatores do Pro.

O WP Masquerade não é um firewall, nem um antivírus, nem um backup: combine-o com uma cópia externa dos seus dados e, se necessário, com um firewall de aplicação web. O funcionamento da página oculta está descrito na página de login personalizada do WP Masquerade.

Em inglês (Wordfence, dois minutos): a ativação da autenticação em dois fatores por aplicativo, vista pelo lado do usuário. Útil para mostrar a uma equipe o que a espera antes de tornar o recurso obrigatório.

Para lembrar

  • Senhas únicas e autenticação em dois fatores primeiro: são as únicas medidas que resistem a um atacante que conhece o seu endereço e o seu nome de usuário.
  • Limite de tentativas, endereço alterado e XML-RPC fechado reduzem o volume de ataques e a carga do servidor.
  • Não esconda o formulário de clientes de uma loja: limite-o.
  • Um só plugin por função, página de login fora do cache, porta de emergência no wp-config.php.
  • Um registro de logins revela o que as outras camadas não barraram.

Perguntas frequentes

Mudar o endereço de login basta para proteger o WordPress?

Não. Isso elimina a maioria dos robôs genéricos e alivia o servidor, mas um atacante que encontre o endereço ou tenha uma senha vazada entra do mesmo jeito. Combine a mudança com o limite de tentativas e a autenticação em dois fatores.

Quantas tentativas de login devo permitir?

Cinco falhas em quinze minutos, seguidas de um bloqueio do endereço IP que aumenta em caso de reincidência, servem para a maioria dos sites. Bloqueie por endereço IP, e não por nome de usuário, para que um desconhecido não consiga travar a sua conta.

Vale a pena colocar um CAPTCHA na página de login?

Ele freia robôs simples, mas incomoda os usuários e não barra nem uma senha roubada nem o XML-RPC. O limite de tentativas e a autenticação em dois fatores rendem mais com menos atrito; um CAPTCHA se justifica sobretudo em um formulário público muito visado.

A autenticação em dois fatores precisa ser obrigatória para todos os usuários?

Não necessariamente. Exija-a das funções que podem publicar, instalar plugins ou gerenciar contas (administrador, editor, gerente de loja). Para assinantes ou clientes, ofereça-a sem exigir.

O que fazer se eu ficar bloqueado fora do meu site?

Conecte-se por FTP ou SFTP e adicione no wp-config.php a constante de emergência do seu plugin, ou renomeie a pasta dele em wp-content/plugins. Com o WP Masquerade, define('CMS_MASQUERADE_DISABLE', true); devolve o wp-login.php. Remova a linha depois de resolver o problema.

Proteja sua página de login em poucos minutos

A versão gratuita muda o endereço de login, esconde wp-login.php e wp-admin e fecha o XML-RPC. O Pro adiciona o limite de tentativas, a autenticação em dois fatores por função, o registro de atividades e os alertas.

Fontes

  • WordPress Developer Resources: Brute Force Attacks (link externo, abre em uma nova aba)
  • WordPress Developer Resources: Hardening WordPress (link externo, abre em uma nova aba)
  • OWASP: Authentication Cheat Sheet (link externo, abre em uma nova aba)
  • NIST SP 800-63B: Authentication and Authenticator Management (link externo, abre em uma nova aba)
Ataques e força bruta6 min

Como escolher e implantar a autenticação de dois fatores no WordPress

A autenticação de dois fatores torna inútil uma senha roubada. Como funciona o TOTP, o papel das chaves de acesso, os métodos a evitar, a implantação…

Ataques e força bruta6 min

Como limitar as tentativas de login no WordPress: limites, durações e armadilhas

Bloquear um endereço depois de algumas falhas parece simples. Na prática, o limite, a duração, proxies como a Cloudflare e os endereços compartilhados decidem se a…

Segurança WordPress, sem ruído

Um e-mail quando importa: novos ataques observados, atualizações do plugin e guias práticos. Sem spam, cancelamento com um clique.