Abra o log de acesso de qualquer site WordPress que esteja online por mais de alguns dias e pesquise por wp-login.php. Você encontrará centenas, frequentemente milhares, de entradas de endereços IP que você nunca ouviu falar, todos tentando combinações comuns de nome de usuário e senha. O login do WordPress é um dos endpoints mais atacados na web pública, simplesmente porque a URL é universal. Cada site WordPress no mundo serve o formulário de login em /wp-login.php e /wp-admin. Isso torna trivialmente fácil para botnets atacarem em escala.
Mover a URL de login para algo personalizado não corrige o problema subjacente (alguém com interesse real no seu site específico encontrará a nova URL de qualquer maneira), mas remove o site de milhões de listas automatizadas que coletam e martelam o endpoint padrão. Na prática, isso reduz o tráfego de login em 95% ou mais, o que é uma vitória significativa só pela carga do servidor. Este guia explica o que a alteração realmente realiza, as várias maneiras de implementá-la e as armadilhas a evitar.
O que mudar a URL de login faz e o que não faz
Vale a pena ser preciso, porque o tópico é deturpado em ambas as direções. Alguns guias o vendem em excesso como uma defesa completa, outros o descartam como teatro de segurança. A posição precisa está entre as duas.
O que faz bem:
- Para botnets automatizados que miram
/wp-login.phpdiretamente. A grande maioria do tráfego de força bruta são scripts burros iterando por wordlists. Eles não procuram a nova URL porque isso requer uma visita real e análise de HTML. - Remove você das listas de filtro "WordPress login presente" que scanners constroem para encontrar alvos rapidamente.
- Reduz drasticamente a carga do servidor e o ruído nos logs. Em sites movimentados isso sozinho é razão suficiente.
- Reduz a visibilidade administrativa acidental. A página de login vaza apenas por existir: mensagens de erro, o favicon, o logo do WordPress, a versão do template de login. Ocultar a URL oculta tudo isso.
O que não faz:
- Parar um invasor determinado que mira especificamente seu site. Eles encontrarão a nova URL através de qualquer um destes: o redirecionamento de login que acontece após o logout, o e-mail de redefinição de senha que linka para a nova URL, o caminho do cookie, um link vazado em seu CMS, ou apenas adivinhando slugs comuns.
- Substituir senhas fortes ou autenticação de dois fatores. A URL de login é uma camada à frente da autenticação real. A defesa real ainda é o que está no formulário, não onde o formulário vive.
- Proteger contra vulnerabilidades em nível de aplicação. Se um plugin tem um bug de execução remota de código, a URL de login é irrelevante.
O enquadramento pragmático: mudar a URL de login é uma alteração de alto retorno e baixo esforço que aborda uma classe específica de ataque (força bruta automatizada não direcionada). Combina bem com senhas fortes, 2FA e um limitador de taxa, mas não substitui nenhum deles.
A maneira recomendada: WPS Hide Login (ou equivalente)
Para 95% dos sites, a solução mais limpa é o plugin gratuito WPS Hide Login. É pequeno (menos de 100KB), tem sido mantido ativamente por anos, tem mais de um milhão de instalações ativas e faz exatamente uma coisa: muda o slug da URL de login. Sem upsells, sem painel de configurações cheio de recursos não relacionados.
A configuração leva um minuto:
- Instale WPS Hide Login do diretório de plugins.
- Ative-o.
- Vá para Configurações, WPS Hide Login.
- Insira seu novo slug no campo "Login URL". Exemplos:
my-secret-login,backstage,access-2347. Evite escolhas óbvias comoadmin,secret,login, o nome do seu domínio com um número anexado, etc. - Opcionalmente, defina uma "Redirection URL" para visitas ao
/wp-login.phpantigo. O comportamento padrão retorna um 404, que é o que você quer contra scanners. Um redirecionamento personalizado para a página inicial também é bom. - Salve.
A partir desse ponto, https://seudominio.com/wp-login.php retorna um 404 para forasteiros, e você faz login via https://seudominio.com/my-secret-login em vez disso. Marque a nova URL nos favoritos imediatamente. O plugin não armazena o slug em nenhum lugar visível de fora, então se você esquecer a URL e não tem acesso FTP, você tem um problema (embora haja um caminho de recuperação descrito abaixo).
Alternativa: um slug personalizado sem um plugin
Se você prefere não adicionar outro plugin, pode implementar o mesmo efeito em código. Coloque isto em um must-use plugin em wp-content/mu-plugins/custom-login-url.php:
<?php
/**
* Plugin Name: Custom Login URL
* Description: Hides /wp-login.php behind a custom slug.
*/
if (!defined('ABSPATH')) {
exit;
}
const CUSTOM_LOGIN_SLUG = 'my-secret-login';
add_action('init', function () {
$requestUri = isset($_SERVER['REQUEST_URI']) ? (string) $_SERVER['REQUEST_URI'] : ';
$path = parse_url($requestUri, PHP_URL_PATH) ?? ';
$path = trim($path, '/');
// Allow access via the custom slug by serving wp-login.php
if ($path === CUSTOM_LOGIN_SLUG) {
require_once ABSPATH . 'wp-login.php';
exit;
}
// Block direct access to the default login URL
if (preg_match('#(^|/)wp-login\.php$#', $path)) {
status_header(404);
nocache_headers();
include get_404_template();
exit;
}
});
// Rewrite the URL in emails and login redirects
add_filter('site_url', function ($url, $path) {
if (str_contains((string) $path, 'wp-login.php')) {
return str_replace('wp-login.php', CUSTOM_LOGIN_SLUG, $url);
}
return $url;
}, 10, 2);
add_filter('wp_redirect', function ($location) {
return str_replace('wp-login.php', CUSTOM_LOGIN_SLUG, $location);
});A vantagem dessa abordagem é controle total e zero dependências de plugin. A desvantagem é que você tem que mantê-lo, e casos de borda (multisite, fluxos de registro personalizados, certos construtores de página que usam o formulário de login) precisam de tratamento extra. Para a maioria dos sites, WPS Hide Login é genuinamente a resposta mais prática.
Escolhendo um bom slug
O slug só precisa ser não óbvio, não criptograficamente secreto. Algumas regras gerais:
- Evite variações comuns de "login", "admin" ou "wp". Scanners que vão além de
/wp-login.phptipicamente têm uma lista:/login,/admin,/secure-login,/wp-secret,/backend,/dashboard. Escolha algo que não esteja nessa lista. - Escolha algo memorável para você, não aleatório. Um slug que você consegue digitar de memória está bem.
my-cat-tofué muito melhor quek7Hg2Pporque o último você guardará em um gerenciador de senhas e o primeiro você não esquecerá. - Não inclua o domínio ou nome da empresa.
example-loginemexample.comé a primeira coisa que um invasor direcionado tenta. - Letras minúsculas, sem caracteres especiais. URLs são tecnicamente sensíveis a maiúsculas, mas usuários reais erram a capitalização o tempo todo. Um slug em minúsculas evita toda essa classe de tickets "não consigo fazer login".
Armadilhas comuns e casos de borda
Algumas coisas quebram ou se comportam inesperadamente quando você move a URL de login. Vale a pena saber antecipadamente.
- Página "Minha Conta" do WooCommerce. O login do cliente em
/my-account/é um fluxo separado e não é afetado pela alteração. Você só oculta o login admin. Os clientes do WooCommerce ainda fazem login normalmente. - Plugins de autenticação de dois fatores. A maioria dos principais plugins de 2FA (Wordfence, WP 2FA, miniOrange, etc.) funcionam bem com WPS Hide Login. Eles se conectam ao processo de login em uma camada abaixo da URL e não se importam onde o formulário vive. Teste uma vez após ativar.
- REST API e XML RPC. A alteração de URL de login não afeta
/wp-json/ou/xmlrpc.php. Se você tem aplicações que se autenticam contra esses, elas continuam funcionando como antes. Se você não usa ativamente XML RPC, este é um bom momento para desabilitá-lo inteiramente (guia separado em nossa base de conhecimento). - Plugins de cache. Alguns caches de página agressivos (LiteSpeed Cache com edge caching, Cloudflare APO) podem cachear a nova URL de login ou, pior, cachear uma resposta de admin logado e servi-la a visitantes deslogados. Após a alteração, visite a nova URL em uma janela privada. Se você vir uma visualização de admin logado, o cache está quebrado; limpe-o e adicione o slug à lista de exclusão de cache.
- E-mails de redefinição de senha. Tanto WPS Hide Login quanto o trecho de código acima reescrevem a URL de redefinição de senha automaticamente, mas plugins de e-mail personalizados ou integrações de e-mail transacional às vezes codificam
wp-login.phpem seus templates. Envie um teste de redefinição de senha para si mesmo após a alteração. - Instalações em subdiretório e multisite. Ambas funcionam, mas cuidado com o slug sendo anexado à URL base errada. Se o WordPress está em
/blog/, a nova URL éhttps://seudominio.com/blog/my-secret-login, nãohttps://seudominio.com/my-secret-login.
Recuperação: o que fazer se você se trancar para fora
Isso acontece. Você configura o slug, faz logout, fecha a aba, e uma semana depois não consegue lembrar se usou hifens, sublinhados ou qual era a terceira palavra. Você não está preso, mas o caminho de recuperação depende do método que você usou.
Se você usou WPS Hide Login: desative o plugin via SFTP. Renomeie a pasta wp-content/plugins/wps-hide-login para wps-hide-login.disabled, ou exclua-a inteiramente. A URL padrão /wp-login.php volta imediatamente. Faça login, procure seu slug nas configurações do plugin, depois ative o plugin novamente. Ou, alternativamente, olhe diretamente no banco de dados do WordPress: o slug está armazenado na tabela wp_options sob a chave whl_page.
Se você usou o código personalizado: SFTP em wp-content/mu-plugins/, abra o arquivo, leia o slug da constante CUSTOM_LOGIN_SLUG. Ou renomeie temporariamente o arquivo para desabilitá-lo, faça login, depois recoloque.
Em ambos os casos, anote a URL em algum lugar persistente no momento em que configurar. Gerenciador de senhas, documentação do projeto, qualquer coisa que sobreviva à perda de um marcador do navegador.
Como verificar que a alteração está ativa
- Abra
https://seudominio.com/wp-login.phpem uma janela privada do navegador. Resultado esperado: uma página 404. - Mesma verificação para
https://seudominio.com/wp-admin/. Também deve redirecionar para o 404, não para o formulário de login. - Abra a nova URL
https://seudominio.com/my-secret-login. Deve mostrar o formulário de login padrão do WordPress. - Faça login normalmente, faça logout, clique no link "Sair". O redirecionamento deve cair na nova URL, não em
/wp-login.php. - Dispare uma redefinição de senha para si mesmo. O link do e-mail deve apontar para a nova URL.
- Execute uma nova varredura do InspectWP. Verificações relacionadas à URL de login devem refletir o novo estado.
Uma vez verificado, a única manutenção contínua é garantir que o plugin (ou seu código personalizado) continue funcionando através de atualizações do núcleo do WordPress, o que deve. Se uma grande atualização alguma vez mudar como o fluxo de login funciona internamente, WPS Hide Login é um dos primeiros plugins a entregar um patch, geralmente em dias.
Toda a alteração é meia hora de trabalho para uma redução permanente na superfície de ataque e uma queda perceptível na carga do servidor. Não há boa razão para deixar o login do WordPress em sua localização padrão em qualquer site de produção.