Hushfort

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

  1. 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.

    A lista pública de usuários da REST em seusite.com/wp-json/wp/v2/users mostrando o slug demo-admin
  2. 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.

    seusite.com/?author=1 redirecionado para seusite.com/author/demo-admin/, uma página de autor com o título Author: demo-admin
  3. 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.

    Configurações da Blindagem de Superfície: lista de usuários da REST bloqueada para visitantes desconectados, varreduras de autores bloqueadas, lista de autores no sitemap e informações de autor no oEmbed removidas
  4. 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.

    O mesmo endereço da lista de usuários da REST agora respondendo rest_no_route com status 404

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:

  1. API REST — /wp-json/wp/v2/users lista os autores com seu slug, que normalmente é igual ao nome de login.
  2. Varreduras de autores — /?author=1 redireciona para /author/nome-de-login/.
  3. Arquivos de autor — a própria URL do arquivo contém o slug do autor.
  4. Sitemap do núcleo — /wp-sitemap-users-1.xml lista 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/users sem 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/users para visitantes que não estão conectados,
  • bloqueia as varreduras ?author=N mantendo 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?

É a coleta dos nomes de login de um site a partir de URLs públicas, como ?author=1 ou a lista de usuários da REST. Sabendo os nomes, os invasores só precisam adivinhar as senhas.

É um risco de segurança meu nome de usuário ficar visível?

Sozinho, não, mas elimina metade do trabalho de adivinhação. Esconder os nomes é um pequeno passo de blindagem; senhas fortes, limites de login e dois fatores fazem o trabalho pesado.

Bloquear a lista de usuários da REST quebra o editor?

Não. Usuários conectados ficam isentos, então o editor de blocos e as telas do painel funcionam normalmente. Só importa se uma integração externa lê sua lista de usuários sem fazer login.

Posso manter as páginas de arquivo de autor?

Sim. Você pode bloquear as varreduras numéricas ?author= enquanto os arquivos /author/nome/ continuam funcionando. Para esconder os nomes por completo, dê aos autores um nome de exibição e um slug de autor diferentes do login.

Por que as mensagens de erro de login importam?

Por padrão, o WordPress diz se o erro foi no nome de usuário ou na senha. Isso confirma quais nomes de usuário existem. Mensagens idênticas para os dois casos eliminam essa pista.

Relatar um erro ou pedir um recurso

Sua mensagem vai direto para a equipe que desenvolve o Hushfort.

Sobre o que é?

Usado apenas para responder a você.

Usamos esses dados apenas para responder a você. Privacidade