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.
Antes de começar: Se você usa o app oficial do WordPress, o Jetpack clássico ou pública por e-mail, confirme que essas integrações continuam funcionando após o bloqueio. Teste em horário de baixo tráfego e tenha o backup do .htaccess antes de editar.
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".
APACHE
# .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>
Perguntas frequentes
Desativar o XML-RPC quebra alguma coisa no meu site?
Só se você usa o app oficial do WordPress, o Jetpack clássico ou publicação por e-mail, que dependem do xmlrpc.php. Sites comuns gerenciados pelo painel e pela REST API não perdem nenhuma função ao desativá-lo.
Bloquear pelo .htaccess é melhor que desativar por plugin?
Sim. O .htaccess barra a requisição antes de o PHP carregar, gastando menos recurso e protegendo contra força bruta de forma mais eficiente. O filtro por código só age depois que o WordPress já iniciou o processamento.
O XML-RPC é o mesmo que a REST API do WordPress?
Não. São interfaces diferentes. O XML-RPC é o protocolo antigo via xmlrpc.php; a REST API é a interface moderna em /wp-json/. Desativar o XML-RPC não afeta a REST API, e a maioria dos plugins atuais usa a REST.
Como sei se estou sob ataque de força bruta pelo XML-RPC?
Olhe o log de acesso do servidor: muitos POST para /xmlrpc.php do mesmo IP em poucos segundos é o sinal clássico. Plugins de segurança também alertam "XML-RPC multicall attempt" quando detectam o abuso do método multicall.
Preciso desativar o XML-RPC se já uso um firewall?
Um WAF ajuda limitando as requisições, mas bloquear o arquivo direto é a defesa mais limpa quando você não usa o recurso. Camadas se somam: firewall mais xmlrpc.php negado no servidor cobrem o vetor por completo.
Como reativo o XML-RPC se precisar depois?
Remova o bloco de negação do xmlrpc.php que você adicionou ao .htaccess, ou apague o filtro xmlrpc_enabled. Acesse seudominio.com/xmlrpc.php: voltar a mostrar "XML-RPC server accepts POST requests only" confirma que está ativo de novo.














