Hushfort

O que é o xmlrpc.php e como desativá-lo no WordPress?

Por Eureka Studio · Atualizado em

Resposta rápida

O XML-RPC permite que apps façam login pelo xmlrpc.php, uma porta separada que ocultar o wp-login.php não fecha. Desativá-lo é seguro, a menos que você use o Jetpack ou o app do WordPress para celular. Bloqueie o arquivo no .htaccess, adicione o filtro xmlrpc_enabled ou use um plugin que feche o login via XML-RPC mantendo os pingbacks. Depois, teste.

Passo a passo

  1. 1Passo 1

    Veja se o xmlrpc.php responde

    Acesse seusite.com/xmlrpc.php. Se aparecer "XML-RPC server accepts POST requests only.", a porta está aberta.

    seusite.com/xmlrpc.php respondendo: XML-RPC server accepts POST requests only
  2. 2Passo 2

    Entenda por que isso importa

    A Varredura de Superfície do Hushfort testa de verdade. Em um site aberto, ela informa que é possível testar senhas contornando o caminho de login oculto e que o system.multicall permite que uma única requisição carregue centenas de tentativas.

    Varredura de Superfície na Visão geral do Hushfort: XML-RPC aberto, com o system.multicall também aberto, além da lista de usuários da REST e da varredura de autores vazando o nome de usuário demo-admin
  3. 3Passo 3

    Escolha o quanto fechar

    Abra Hushfort → Blindagem de Superfície e ligue Ativar a blindagem de superfície. O XML-RPC começa em "Desativar login, manter pingbacks (recomendado)", o que serve para a maioria dos sites. "Desativar completamente" é o mais rígido, mas impede o Jetpack e o app oficial para celular. Clique em Salvar alterações.

    Blindagem de Superfície ligada, com o XML-RPC definido como Desativar login, manter pingbacks (recomendado)
  4. 4Passo 4

    Teste se o login via XML-RPC é recusado

    De volta à Visão geral, clique em Verificar novamente. A linha do XML-RPC agora deve dizer "Login desativado — tentativas de senha são rejeitadas, pingbacks continuam funcionando."

    Varredura de Superfície após a correção: XML-RPC, lista de usuários da REST, varredura de autores e lista de autores no sitemap, todos fechados

Por que isso importa

O XML-RPC é uma antiga interface de controle remoto do WordPress. Antes de a API REST existir, era assim que editores de desktop e apps para celular publicavam posts. Ele ainda vem em todo site WordPress, em /xmlrpc.php, e ainda aceita nome de usuário e senha em cada requisição.

Isso o torna uma segunda porta de login. Ocultar o wp-login.php não mexe nele. Um código de limite de login que observa apenas o formulário de login não o enxerga. E, com o system.multicall, uma única requisição HTTP pode carregar centenas de palpites de senha. Um limite que conta requisições vê uma tentativa onde houve quinhentas.

Isso não é teoria. Criamos esta camada depois que uma loja continuou recebendo tentativas de senha pelo XML-RPC quando sua página de login já estava oculta.

Você usa o XML-RPC? Provavelmente não, se nenhum destes casos se aplica a você:

  • Você conecta o site ao Jetpack.
  • Você publica ou modera pelo app oficial do WordPress para celular.
  • Você usa uma ferramenta de blog para desktop mais antiga, ou um serviço que pede seu nome de usuário e sua senha do WordPress (em vez de uma senha da aplicação) para publicar em seu nome.
  • Você depende de pingbacks de outros blogs.

Se não tiver certeza, feche apenas o login e mantenha os pingbacks. Isso elimina o risco de adivinhação de senhas e mantém as partes inofensivas. Você sempre pode apertar mais depois.

Erros comuns

  • Ocultar o login e parar por aí. A adivinhação de senhas simplesmente se muda para o xmlrpc.php.
  • Bloquear o arquivo inteiro sem verificar. O Jetpack e o app oficial do WordPress para celular se conectam pelo XML-RPC. Se você os usa, feche só os métodos de login ou teste com cuidado.
  • Confiar em uma opção sem testar. Alguns métodos deixam partes do XML-RPC respondendo. Sempre confira o resultado com uma requisição real (veja o passo 4, ou verifique o que o seu site expõe).
  • Esquecer a camada de cache. Se uma regra da CDN já bloqueia o xmlrpc.php, uma configuração no nível do WordPress não vai mostrar efeito nenhum. Tudo bem; só saiba qual camada está fazendo o trabalho.

Sem plugin

Opção 1: o filtro xmlrpc_enabled. Adicione isto a um pequeno plugin obrigatório (must-use) (wp-content/mu-plugins/no-xmlrpc-login.php) ou ao functions.php do seu tema filho:

<?php
add_filter( 'xmlrpc_enabled', '__return_false' );

Isso desativa os métodos do XML-RPC que exigem login. Os pingbacks continuam funcionando porque não precisam de login. Sozinho, ele não remove o system.multicall, e o arquivo continua respondendo às requisições. Para remover também o método multicall:

<?php
add_filter( 'xmlrpc_methods', function ( $methods ) {
    unset( $methods['system.multicall'] );
    return $methods;
} );

Opção 2: bloquear o arquivo no servidor. No Apache, no .htaccess:

<Files xmlrpc.php>
  Require all denied
</Files>

No Nginx: location = /xmlrpc.php { deny all; }. Esta é a opção mais rígida e não custa nada ao servidor, mas também acaba com os pingbacks, o Jetpack e o app para celular, e fica fora do WordPress, então é fácil esquecê-la quando você muda de hospedagem.

Se algo der errado

  • O Jetpack mostra um erro de conexão. O Jetpack precisa do XML-RPC. Mude de "Desativar completamente" para "Desativar login, manter pingbacks" ou remova a regra do servidor.
  • O app do WordPress para celular não consegue acessar. Mesma causa. Use o navegador no celular ou permita o login via XML-RPC e conte com os limites de login mais os dois fatores.
  • Uma ferramenta de publicação parou de postar. Verifique se ela usa o XML-RPC. A maioria das ferramentas modernas migrou para a API REST com senhas da aplicação.

Com o Hushfort

A Trava de Backdoor faz parte do Hushfort Pro. A Varredura de Superfície, que mostra se o XML-RPC está aberto, está no Hushfort Security, o plugin de segurança gratuito para WordPress.

A Trava de Backdoor faz parte da camada Blindagem de Superfície do Hushfort. Ela oferece quatro opções:

  • Desativar login, manter pingbacks (recomendado): a adivinhação de senhas pelo XML-RPC se torna impossível, enquanto pingbacks e trackbacks continuam funcionando. Ideal para lojas.
  • Desativar completamente: a opção mais rígida. O Jetpack e o app oficial para celular não conseguem se conectar.
  • Desativar só o system.multicall: fecha a adivinhação em massa e deixa o resto como está.
  • Não alterar: o padrão do WordPress.

Depois, a Varredura de Superfície confere o resultado com requisições reais, para você ver o que alguém de fora vê. A Proteção de Carga também cobra mais pelas requisições ao xmlrpc.php do que por uma visualização de página normal, o que freia qualquer ruído restante.

Perguntas frequentes

É seguro desativar o XML-RPC no WordPress?

Para a maioria dos sites, sim. O WordPress moderno usa a API REST no editor de blocos e na maioria das integrações. O XML-RPC ainda é usado pelo Jetpack, pelo app oficial do WordPress para celular e por algumas ferramentas de publicação mais antigas, então confira essas primeiro.

Ocultar a página de login também esconde o xmlrpc.php?

Não. O xmlrpc.php aceita nomes de usuário e senhas por conta própria, então os invasores podem continuar tentando por ali depois que você oculta o wp-login.php.

O que é o system.multicall?

Um método do XML-RPC que executa várias chamadas em uma só requisição. Os invasores o usam para enviar centenas de palpites de senha em uma única requisição, driblando limites que contam requisições.

Desativar o XML-RPC quebra os pingbacks?

Bloquear o arquivo inteiro quebra. Fechar apenas o login via XML-RPC, deixando o método de pingback aberto, mantém pingbacks e trackbacks funcionando.

O filtro xmlrpc_enabled desliga o XML-RPC por completo?

Não. Ele só desativa os métodos que exigem login. O arquivo continua respondendo e as chamadas de pingback continuam rodando. Muitas vezes é isso que você quer, mas teste o resultado.

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