Como bloquear a enumeração de usuários no WordPress?
Por Eureka Studio · Atualizado em
Resposta rápida
O WordPress mostra nomes de usuário em quatro lugares públicos: o endpoint REST /wp-json/wp/v2/users, os redirecionamentos de ?author=1, as URLs dos arquivos de autor e o sitemap de usuários do núcleo. Para escondê-los, bloqueie a lista da REST para visitantes desconectados, impeça as varreduras ?author=, remova o sitemap de usuários e deixe as mensagens de erro de login idênticas. Um plugin faz os quatro; teste cada um depois.
Passo a passo
1Passo 1
Veja o que o WordPress mostra hoje
Acesse seusite.com/wp-json/wp/v2/users sem estar conectado. Em uma instalação padrão, você recebe uma lista JSON com o nome de login de cada autor no campo slug.
2Passo 2
Teste a varredura de autores
Agora acesse seusite.com/?author=1. O WordPress redireciona para /author/seu-nome-de-usuario/, colocando o nome na barra de endereço. Os bots contam 1, 2, 3 para coletar todos os usuários.
3Passo 3
Feche os quatro lugares
Abra Hushfort → Blindagem de Superfície e ative-a. Mantenha ligadas as opções Lista de usuários da REST, Varredura de autores ("Bloquear varreduras ?author=1"), Lista de autores no sitemap e Informações de autor no oEmbed, e salve.
4Passo 4
Teste de novo em uma janela anônima
Repita as mesmas requisições sem estar conectado. A lista de usuários agora responde "rest_no_route" com um 404, e ?author=1 não redireciona mais para um nome de usuário.
Por que isso importa
Para fazer login, o invasor precisa de duas coisas: um nome de usuário e uma senha. O WordPress, de fábrica, entrega a primeira metade. Não é um bug; cada um desses lugares existe por um motivo (feeds para apps, URLs de autor amigáveis, mecanismos de busca). Mas, juntos, eles permitem que qualquer bot monte em segundos uma lista com todos os nomes de login do seu site.
Esconder os nomes de usuário não torna segura uma senha fraca. O que isso faz é remover a metade fácil do quebra-cabeça, para que cada palpite tenha de acertar tanto o nome quanto a senha. Combinado com limites de login e login em dois fatores, isso transforma a adivinhação de lenta em inútil.
Os quatro lugares onde o WordPress publica nomes de usuário:
- API REST —
/wp-json/wp/v2/userslista os autores com seu slug, que normalmente é igual ao nome de login. - Varreduras de autores —
/?author=1redireciona para/author/nome-de-login/. - Arquivos de autor — a própria URL do arquivo contém o slug do autor.
- Sitemap do núcleo —
/wp-sitemap-users-1.xmllista as URLs dos arquivos de autor. As respostas oEmbed também podem incluir informações do autor.
Erros comuns
- Corrigir um lugar e dar por encerrado. Fechar o
?author=enquanto a lista da REST continua aberta não muda nada para um bot. Confira os quatro. - Nome de exibição igual ao nome de login. Mesmo com todos os vazamentos fechados, um tema que mostra "Publicado por admin" entrega o nome. Em Usuários → Perfil, escolha em "Exibir o nome publicamente como" um nome diferente.
- Quebrar páginas de autor legítimas. Em um blog com vários autores, os arquivos de autor são úteis. Bloqueie as varreduras numéricas em vez dos arquivos em si.
- Erros de login detalhados. "A senha informada para o usuário jane está incorreta" confirma que o nome existe. Use uma só mensagem para os dois casos.
Sem plugin
Você pode cobrir a maior parte disso com um plugin obrigatório (must-use) (wp-content/mu-plugins/hide-users.php):
<?php
// 1. REST user list: logged-out visitors get nothing.
add_filter( 'rest_endpoints', function ( $endpoints ) {
if ( ! is_user_logged_in() ) {
unset( $endpoints['/wp/v2/users'], $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
}
return $endpoints;
} );
// 2. ?author=N scans: stop the redirect that reveals the name.
add_action( 'template_redirect', function () {
if ( isset( $_GET['author'] ) && ! is_admin() ) {
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );
// 3. Core sitemap: drop the users provider.
add_filter( 'wp_sitemaps_add_provider', function ( $provider, $name ) {
return 'users' === $name ? false : $provider;
}, 10, 2 );
// 4. Same message for wrong username and wrong password.
add_filter( 'login_errors', function () {
return 'The username or password is incorrect.';
} );
Ressalvas: teste primeiro em um site de homologação (staging), porque temas e plugins às vezes leem a lista de usuários da REST. Isso não muda o slug do autor nas URLs dos arquivos; para isso, altere o nicename de cada autor ou use um plugin de nome de exibição. E é mais um arquivo para acompanhar quando você migrar ou reconstruir o site.
Se algo der errado
- Uma integração perdeu a lista de autores. Algumas ferramentas externas leem
/wp/v2/userssem fazer login. Dê a elas uma senha da aplicação para que se autentiquem ou libere a lista novamente. - As páginas de autor mostram um 404. Você escolheu desativar completamente os arquivos de autor. Mude para a opção que bloqueia apenas as varreduras numéricas.
- O plugin de SEO ainda lista os autores. Muitos plugins de SEO geram o próprio sitemap de autores. Desative também os sitemaps de autores nesse plugin.
Com o Hushfort
O Escudo de Nomes de Usuário faz parte do Hushfort Pro. A Varredura de Superfície, que mostra o que ainda vaza, está no Hushfort Security, o plugin de segurança gratuito para WordPress.
O Escudo de Nomes de Usuário, parte da camada Blindagem de Superfície do Hushfort, fecha os quatro lugares em uma única tela:
- bloqueia a lista REST
/wp/v2/userspara visitantes que não estão conectados, - bloqueia as varreduras
?author=Nmantendo os arquivos/author/nome/(ou desativa os arquivos por completo, se você preferir), - remove o sitemap de usuários do núcleo e os detalhes do autor das respostas oEmbed,
- deixa as mensagens de erro de login iguais para nome de usuário errado e senha errada.
Depois, a Varredura de Superfície testa cada lugar com requisições reais e aponta qualquer nome de usuário que ainda vaze.
Perguntas frequentes
O que é enumeração de usuários no WordPress?
É um risco de segurança meu nome de usuário ficar visível?
Bloquear a lista de usuários da REST quebra o editor?
Posso manter as páginas de arquivo de autor?
Por que as mensagens de erro de login importam?
Tutoriais relacionados
Como fazer um teste de segurança do que o meu site WordPress expõe?
Teste seu site WordPress como um bot faz: cinco requisições mostram se o login, o XML-RPC e os nomes de usuário estão expostos e como fechar cada um.
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 limitar as tentativas de login no WordPress?
Barre ataques de força bruta no WordPress bloqueando o IP após alguns logins com falha. Configurações que funcionam, o código manual e brechas a fechar.
Ver o passo a passo



