Guia · 3 min de leitura

Como proteger o login do WordPress

Resposta curta: dê a cada administrador uma senha longa e única e autenticação em dois fatores, limite quantas tentativas de login um mesmo endereço pode fazer e remova contas de administrador que ninguém usa. O núcleo do WordPress não limita tentativas de login sozinho, então adicione um limite no servidor web, na CDN ou com um plugin. Só trocar a URL de login não é proteção.

Atualizado em · HackGrade

Verifique seu site primeiro. A análise gratuita mostra quais destas correções você precisa. Análise de segurança do WordPress

Passos rápidos

  1. Organize as contas de administrador. Remova administradores sem uso e dê aos demais o menor papel que funcione.
  2. Ative o login em duas etapas. Use um app TOTP com códigos de backup para todo administrador e editor.
  3. Limite o wp-login.php. Limite as tentativas por endereço IP no servidor, na CDN ou com um plugin.
  4. Restrinja ou feche outras portas. Bloqueie o XML-RPC se não usar e revise as senhas de aplicativo.
  5. Encerre sessões roubadas. Diante de qualquer suspeita, troque as chaves secretas para encerrar todas as sessões.

O código e a configuração ficam em inglês.

Por que a página de login é a porta da frente

Robôs testam senhas comuns e vazadas contra /wp-login.php e /xmlrpc.php o dia todo em quase todo site WordPress. A maioria acerta não por esperteza, mas porque uma senha foi reutilizada em outro site que vazou. Uma única senha de administrador roubada basta para instalar um plugin malicioso, então o login merece várias camadas.

1. Organize as contas de administrador

Liste todas as pessoas com controle total e remova ou rebaixe quem não precisa. Quem escreve conteúdo raramente precisa de mais que o papel de Editor ou Autor.

Terminal
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

Cada pessoa tem a própria conta (nada de login “admin” compartilhado) e uma senha longa e única de um gerenciador de senhas. Se seu site ainda tem um usuário chamado literalmente admin, crie um novo administrador, transfira o conteúdo para ele e exclua o antigo.

2. Ative a autenticação em dois fatores

O login em duas etapas impede a maioria dos ataques com senhas roubadas, porque o invasor também precisa de um código do celular do usuário. O plugin gratuito Two Factor, do diretório de plugins do WordPress.org, suporta apps autenticadores (TOTP), códigos por e-mail e códigos de backup. Instale-o e cada usuário o ativa em Usuários → Perfil. Prefira um app autenticador a códigos por e-mail, entregue aos usuários seus códigos de backup e exija o recurso de todo administrador e editor. Muitas suítes de segurança oferecem a mesma função, se você já usa uma.

3. Limite as tentativas de login

O núcleo do WordPress não limita logins com falha, então os robôs podem tentar sem parar. O melhor lugar para barrá-los é antes de o PHP rodar. No nginx, um limite de requisições na página de login deixa os usuários reais passarem e desacelera os robôs:

nginx
# in the http { } block
limit_req_zone $binary_remote_addr zone=wplogin:10m rate=10r/m;

# in the server { } block, above your general PHP location
location = /wp-login.php {
    limit_req zone=wplogin burst=5 nodelay;
    limit_req_status 429;
    # then the same fastcgi lines as in your location ~ \.php$ block, e.g.:
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

Teste no seu próprio site; depois de algumas requisições rápidas, você deve ver 429:

Terminal
for i in $(seq 1 20); do curl -s -o /dev/null -w '%{http_code} ' -X POST https://yourdomain.com/wp-login.php; done; echo

Atrás do Cloudflare, uma regra de rate limiting para o caminho /wp-login.php faz o mesmo na borda. Em hospedagem compartilhada sem acesso ao servidor, um plugin conhecido para limitar tentativas de login é a escolha prática.

4. Permita o login só de endereços conhecidos (opcional)

Se todos que fazem login trabalham a partir de endereços IP fixos, você pode fechar a página de login para o resto. No Apache 2.4, no .htaccess:

.htaccess
<Files "wp-login.php">
    Require ip 203.0.113.10 198.51.100.0/24
</Files>

Não bloqueie o /wp-admin/admin-ajax.php: muitos temas e plugins o usam para os visitantes. Pule este passo se sua equipe entra de redes variadas ou se clientes fazem login numa loja; use 2FA e limite de tentativas no lugar.

5. Feche as outras portas

O XML-RPC é uma API remota antiga que também aceita senhas. Se você não usa o app móvel do WordPress nem o Jetpack, bloqueie-o como descrito no checklist de blindagem do WordPress. As senhas de aplicativo permitem que ferramentas externas usem a API REST; revise-as em Usuários → Perfil e revogue as que você não reconhecer. Se nada as usa, desative o recurso com um pequeno plugin must-use:

PHP
<?php
// wp-content/mu-plugins/no-app-passwords.php
add_filter( 'wp_is_application_passwords_available', '__return_false' );

6. Se você suspeita de uma senha roubada

Troque a senha e depois substitua as chaves secretas no wp-config.php. Isso encerra todas as sessões em todos os dispositivos, inclusive a de um invasor:

Terminal
wp config shuffle-salts

Depois procure administradores ou plugins que você não adicionou, como descrito em Como saber se seu site WordPress foi invadido.

E esconder a URL de login?

Mover o wp-login.php para um endereço secreto reduz o ruído de robôs nos logs, mas não é proteção: o endereço vaza por links e plugins e não ajuda em nada contra uma senha vazada. Use como um extra, depois do 2FA e do limite de tentativas.

O que o HackGrade verifica

A análise gratuita aponta nomes de usuário que o WordPress lista publicamente, um endpoint XML-RPC aberto e núcleo, plugins e temas do WordPress desatualizados com vulnerabilidades conhecidas. Ela nunca tenta adivinhar senhas, nem mesmo na análise aprofundada.

Perguntas frequentes

O WordPress limita tentativas de login por padrão?

Não. O núcleo do WordPress não limita logins com falha. Adicione um limite no servidor web, na sua CDN ou com um plugin.

Qual método de dois fatores devo usar no WordPress?

Um app autenticador (TOTP) com códigos de backup guardados. Códigos por e-mail são melhores que nada, mas quem entrar na caixa de e-mail também recebe o código.

Devo mudar a URL do wp-admin?

Isso reduz o ruído de robôs, mas não detém um invasor determinado nem uma senha vazada. Faça só como complemento ao 2FA e ao limite de tentativas.

O limite de tentativas vai bloquear meus clientes?

Não com um limite sensato, como 10 tentativas por minuto com uma pequena folga. Pessoas reais raramente fazem login mais de algumas vezes por minuto.

Fontes

Guias relacionados

Grátis · Na hora · Sem cadastro

Descubra sua nota antes que outra pessoa descubra.

Análise passiva. Nada é atacado sem a sua permissão.

Comece grátis. Pro a partir de US$ 29 por mês (cerca de US$ 24 no plano anual), ou um relatório avulso completo por US$ 29. Ver preços