Por padrão, o WordPress permite que a lista de usuários administrativos seja obtida por meio da seguinte URL:
https://<seusite>/wp-json/wp/v2/users/
Essa exposição pode representar um risco de segurança, pois facilita ataques de força bruta e tentativas de phishing.
Bloqueando a listagem pela API REST
Desativar completamente a API REST não é viável, pois diversos plugins e o próprio núcleo do WordPress utilizam chamadas de API.
Uma alternativa é remover apenas os endpoints que expõem informações de usuários.
Adicione o seguinte filtro no arquivo functions.php
do seu tema ativo ou em um plugin de snippets (como o Code Snippets):
add_filter('rest_endpoints', function($endpoints) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
return $endpoints;
});
Nota: Esse filtro remove a listagem e consulta de usuários via REST, mas não interfere em outras funcionalidades da API.
Bloqueando enumeração de usuários por parâmetro author
Outra forma de descobrir logins de usuários no WordPress é através da URL:
https://<seusite>/?author=1
Esse método exibe a página de autor com o apelido e posts publicados.
Para bloquear esse tipo de consulta, recomendamos o plugin Stop User Enumeration.
- Ele bloqueia tentativas de enumeração de usuários por query string.
- Pode ser integrado ao Fail2ban para banir IPs que realizem múltiplas tentativas.
Integração com Fail2ban
Se você utiliza o Fail2ban (conforme orientado em nossas wikis), basta instalar os arquivos de configuração fornecidos pelo desenvolvedor do plugin:
Arquivo: /etc/fail2ban/jail.d/wordpress-userenum.conf
Arquivo: /etc/fail2ban/filter.d/wordpress-userenum.conf
Exemplo de configuração:
[wordpress-userenum]
enabled = true
filter = wordpress-userenum
logpath = /var/log/auth.log
maxretry = 2
port = http,https
[INCLUDES]
before = common.conf
[Definition]
_daemon = wordpress
failregex = ^%(__prefix_line)sAttempted user enumeration from <HOST>$
ignoreregex =
Notas importantes:
- Use
maxretry = 2
(ou maior) para evitar falsos positivos de bots de busca. - Após incluir os arquivos, reinicie o Fail2ban.
Mais informações
- Confira nosso guia: Como proteger o WordPress contra invasões?
- Veja também: Boas práticas de segurança recomendadas pela CentralServer
AVISO LEGAL: Os procedimentos descritos neste documento devem ser executados de acordo com o contexto de cada sistema, de forma a evitar impactos negativos à segurança, disponibilidade, integridade e privacidade de dados. A CentralServer se reserva o direito de modificar a qualquer tempo e sem aviso prévio as informações aqui apresentadas a fim de refletir o lançamento de novos serviços, atualizações físicas e operacionais, e evolução do estado-da-arte da tecnologia.