Como desativar o XML-RPC com segurança no WordPress
O que é o XML-RPC no WordPress?
O XML-RPC é um protocolo antigo de acesso remoto do WordPress, exposto pelo arquivo xmlrpc.php na raiz do site. Ele permite publicar por apps externos, pingbacks e algumas integrações legadas. O problema é de segurança: o método system.multicall deixa o atacante testar centenas de senhas em uma única requisição (força bruta amplificada), e o pingback é usado em ataques de negação de serviço refletida. A maioria dos sites hoje usa a REST API e não precisa do XML-RPC, então desativá-lo é uma medida de hardening segura.
Como identificar
- No log de acesso aparecem dezenas de POST para “/xmlrpc.php” vindos do mesmo IP em segundos.
- O plugin de segurança reporta “XML-RPC multicall attempt” ou bloqueios repetidos no xmlrpc.php.
- Picos de CPU e lentidão coincidindo com requisições a xmlrpc.php no relatório do servidor.
- Recebe pingbacks de spam ou seu site aparece como origem de um ataque de pingback reportado pelo host.
Como prevenir
- Mantenha o xmlrpc.php bloqueado por padrão em sites que não dependem dele
- Use um firewall/WAF que limite requisições a xmlrpc.php e bloqueie multicall
- Prefira a REST API para integrações modernas, que tem controle de autenticação mais granular
Causa
- O xmlrpc.php fica ativo por padrão em toda instalação WordPress, mesmo sem app remoto configurado.
- O método system.multicall permite testar muitas senhas numa só chamada, burlando limites de tentativa de login.
- O recurso de pingback (X-Pingback) é explorado para ataques DDoS refletidos usando seu site como amplificador.
- Bots varrem a internet em busca de xmlrpc.php aberto porque é um vetor de ataque conhecido e padronizado.
- Plugins de cache ou firewall mal configurados deixam o xmlrpc.php fora das regras de bloqueio.
Como resolver
- Confirme se você realmente não usa o XML-RPC: verifique se algum app móvel, o Jetpack clássico ou uma integração externa pública via xmlrpc.php. Se nada depende dele, pode bloquear com segurança.
- Bloqueie o arquivo no servidor (Apache): no Apache, a forma mais robusta é negar acesso ao xmlrpc.php direto no .htaccess da raiz, antes mesmo de o PHP rodar. Use o bloco de código abaixo, que recusa qualquer requisição ao arquivo.
- No Nginx, negue pela configuração do site: adicione um bloco location para xmlrpc.php retornando 403 e peça ao host para recarregar a configuração.
- Alternativa via filtro do WordPress: se não puder editar o servidor, desative o XML-RPC por código no functions.php do tema-filho ou em um plugin de snippets, com o filtro xmlrpc_enabled e a remoção do cabeçalho de pingback.
- Valide o bloqueio: acesse seudominio.com/xmlrpc.php no navegador. Bloqueado certo, retorna 403 Forbidden em vez da mensagem "XML-RPC server accepts POST requests only".
# .htaccess da raiz - nega acesso ao xmlrpc.php antes de o PHP rodar (Apache)
<Files xmlrpc.php>
Require all denied
</Files>
# Em servidores Apache mais antigos (2.2), use a sintaxe equivalente:
# <Files xmlrpc.php>
# Order Deny,Allow
# Deny from all
# </Files>














