A especificação XML-RPC WordPress foi desenvolvida para padronizar a comunicação entre diferentes sistemas, significando que aplicações fora do WordPress (tais como outras plataformas de blogs e clientes desktop) poderiam interagir com o WordPress.

Esta especificação faz parte do WordPress desde sua criação e fez um trabalho muito útil. Sem ela, o WordPress estaria em seu próprio silo, separado do resto da Internet.

Entretanto, o xmlrpc.php tem seus pontos negativos. Ele pode introduzir vulnerabilidades ao seu site WordPress e agora foi substituído pelo WordPress REST API, que faz um trabalho muito melhor de abrir o WordPress para outras aplicações.

Neste post, vamos explicar o que é xmlrpc.php, por que você deve desativá-lo e ajudá-lo a identificar se ele está rodando em seu site WordPress.

Pronto? Vamos mergulhar!

O que é xmlrpc.php?

XML-RPC é uma especificação que permite a comunicação entre o WordPress e outros sistemas. Ele fez isso padronizando essas comunicações, usando HTTP como mecanismo de transporte e XML como mecanismo de codificação.

XML-RPC é anterior ao WordPress: ele estava presente no software de blog b2, que foi bifurcado para criar o WordPress em 2003. O código por trás do sistema é armazenado em um arquivo chamado xmlrpc.php, no diretório raiz do site. E ainda está lá, mesmo que o XML-RPC esteja largamente desatualizado.

Nas primeiras versões do WordPress, o XML-RPC foi desativado por padrão. Mas desde a versão 3.5, ele foi habilitado por padrão. A principal razão para isto era permitir que o aplicativo móvel WordPress falasse com sua instalação do WordPress.

Se você usou o aplicativo móvel WordPress antes da versão 3.5, você pode se lembrar de ter que habilitar o XML-RPC em seu site para que o aplicativo possa postar conteúdo. Isto porque o aplicativo não estava rodando o WordPress em si; ao invés disso, era um aplicativo separado que se comunicava com seu site WordPress usando xmlrpc.php.

Mas não foi apenas para o aplicativo móvel que o XML-RPC foi usado: ele também foi usado para permitir a comunicação entre WordPress e outras plataformas de blogs, ele permitiu trackbacks e pingbacks, e alimentou o plugin Jetpack que liga um site WordPress auto-hospedado ao WordPress.com.

Mas como o REST API foi integrado ao núcleo do WordPress, o arquivo xmlrpc.php não é mais utilizado para esta comunicação. Em vez disso, a REST API é usada para se comunicar com o aplicativo móvel WordPress, com clientes desktop, com outras plataformas de blogs, com WordPress.com (para o plugin Jetpack) e com outros sistemas e serviços. A gama de sistemas com os quais a REST API pode interagir é muito maior do que a permitida pelo xmlrpc.php. Além disso, há muito mais flexibilidade.

Como o REST API substituiu o XML-RPC, você deve agora desativar o xmlrpc.php em seu site. Vamos ver por quê.

Por que você deve desativar o xmlrpc.php

A principal razão pela qual você deve desativar o xmlrpc.php em seu site WordPress é porque ele introduz vulnerabilidades de segurança e pode ser o alvo de ataques.

Agora que o XML-RPC não é mais necessário para se comunicar fora do WordPress, não há razão para mantê-lo ativo. É por isso que é sábio tornar seu site mais seguro, desativando-o.

Se o xmlrpc.php é uma obrigação de segurança e não faz mais um trabalho, por que ele não foi removido do WordPress por completo?

A razão para isto é porque uma das principais características do WordPress será sempre a retrocompatibilidade. Se você estiver gerenciando bem seu site, você saberá que manter o WordPress atualizado, assim como quaisquer plugins ou temas, é essencial.

Mas sempre haverá proprietários de websites que não estão dispostos ou não podem atualizar sua versão do WordPress. Se eles estiverem rodando uma versão anterior à REST API, ainda precisarão ter acesso ao xmlrpc.php.

Vamos analisar as vulnerabilidades específicas com mais detalhes.

Ataques DDoS via XML-RPC Pingbacks

Uma das funções que o xmlrpc.php habilitou foi o pingbacks e trackbacks. Estas são as notificações que aparecem nos comentários de seu site quando outro blog ou site faz um link para seu conteúdo.

A especificação XML-RPC foi o que tornou possível esta comunicação, mas isso foi substituído pelo REST API (como já vimos).

Se o XML-RPC estiver habilitado em seu site, um hacker pode potencialmente montar um ataque DDoS em seu site explorando o xmlrpc.php para enviar um grande número de pingbacks para seu site em um curto espaço de tempo. Isto poderia sobrecarregar seu servidor e colocar seu site fora de ação.

Ataques de força bruta via XML-RPC

Cada vez que o xmlrpc.php faz um pedido, ele envia o nome de usuário e a senha para autenticação. Isto apresenta uma significativa responsabilidade de segurança e é algo que a REST API não faz. Na verdade, a REST API usa OAuth que envia tokens para autenticação em vez de nomes de usuário ou senhas.

Como o xmlrpc.php envia informações de autenticação com cada pedido, os hackers poderiam usá-las para tentar acessar seu site. Um ataque de força bruta como este poderia permitir que eles inserissem conteúdo, apagassem código ou danificassem seu banco de dados.

Se um atacante enviar pedidos suficientes ao seu site, cada um com um par de nome de usuário e senha diferentes, há uma chance de que eles possam eventualmente acertar no correto, dando-lhes acesso ao seu site.

É por isso que, se você estiver executando uma versão atualizada do WordPress, que usa a REST API para se comunicar com sistemas externos, você deve desativar o xmlrpc.php. Isso não é necessário e pode estar tornando seu site vulnerável.

O xmlrpc.php está rodando em seu site WordPress?

A primeira coisa que você precisa fazer é identificar se o xmlrpc.php está rodando em seu site WordPress.

Este não é um caso simples de verificar se o arquivo está lá: ele faz parte de toda instalação do WordPress e estará presente mesmo que o XML-RPC esteja desativado.

Para verificar se o xmlrpc.php está habilitado em seu site, use o Aplicação Web de Validação XML-RPC do WordPress. Este verificará seu site e lhe informará se o xmlrpc.php está habilitado.

Aplicação Web de Validação XML-RPC
Aplicação Web de Validação XML-RPC

Isto mostra que o xmlrpc.php foi desativado em kinsta.com. Então, se você executar a verificação e descobrir que o xmlrpc.php ainda está habilitado em seu site, como você o desliga?

Como desativar o xmlrpc.php

Há três maneiras de desativar o xmlrpc.php:

Vamos dar uma olhada em cada um deles individualmente.

Como desativar o xmlrpc.php com um Plugin

Instalar um plugin para desativar o xmlrpc.php é a maneira mais fácil de fazer isso. O plugin Disable XML-RPC irá desativá-lo completamente. Veja como você o usa.

Meu ponto de partida é meu próprio website, no qual o xmlrpc.php está habilitado. Você pode ver isto através da verificação que fiz:

Rachel McCollin website - Verificação XML-RPC
Rachel McCollin website – Verificação XML-RPC

Instale o plugin através de sua tela Plugins no administrador WordPress, e ative-o.

Você não precisa fazer mais nada: ativar o plugin fará com que ele desabilite o XML-RPC. Agora, se eu fizer uma verificação em meu site, eu terei um resultado diferente:

Rachel McCollin website - segunda verificação XML-RPC
Rachel McCollin website – segunda verificação XML-RPC

É simples assim!

Desativar os Pingbacks XML-RPC com um Plugin

Mas e se você quiser desativar alguns aspectos do xmlrpc.php e não outros? O plugin Disable XML-RPC Pingback você desabilita apenas a funcionalidade pingback, significando que você ainda tem acesso a outros recursos do XML-RPC se precisar deles.

O plugin funciona da mesma forma que o plugin Desabilitar XML-RPC: basta instalar, ativá-lo e ele funcionará.

Configurar a ativação do XML-RPC e REST API com um Plugin

Se você quiser um controle mais fino de como ambos xmlrpc.php e o REST API são configurados em seu site, você pode instalar o plugin REST XML-RPC Data Checker.

Uma vez instalado e ativado este plugin, vá para Configurações > REST XML-RPC Data Checker e clique na guia XML-RPC.

REST XML-RPC Data Checker
REST XML-RPC Data Checker

Isto permite configurar exatamente quais aspectos do xmlrpc.php estão ativos em seu site.

Alternativamente, você pode simplesmente desligá-lo completamente. E se você também quiser ter controle sobre a REST API, o plugin lhe dá outra aba para isso.

Como desativar o xmlrpc.php sem um Plugin

Se você preferir não instalar outro plugin em seu site, você pode desativar o xmlrpc.php adicionando algum código em um filtro, ou ao seu arquivo .htaccess. Vamos analisar os dois métodos.

Desativar xmlrpc.php através de um filtro

Uma opção aqui é usar o filtro xmlrpc_enabled para desativar o xmlrpc.php. Adicione esta função a um plugin e ative-o em seu site:

add_filter( 'xmlrpc_enabled', '__return_false' );

Você poderia adicionar isto ao seu arquivo de funções temáticas, mas é melhor praticar a escrita de um plugin.

A outra opção tem a ver com a edição de seu arquivo .htaccess, que está disponível com provedores de hospedagem que utilizam Apache, conectando-se ao servidor de seu site via FTP ou cPanel.

Desativar xmlrpc.php através do arquivo .htacess

Em seu arquivo .htaccess, adicione este código:

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

Certifique-se de fazer uma cópia do arquivo antigo antes de fazê-lo, para o caso de se deparar com qualquer problema.

Faça seu provedor de hospedagem desativar xmlrpc.php

Alternativamente, alguns provedores de hospedagem irão desativar o xmlrpc.php se um ataque for detectado.

Isto produzirá um erro 403 e interromperá o ataque em seus rastros.

Em Kinsta, não há necessidade de se preocupar, isto já está bloqueado. Entre em contato com o suporte a respeito de qualquer problema.

Se você mesmo estiver fazendo isso, é melhor usar um dos métodos acima. Mas antes de fazê-lo, verifique sempre com seu provedor de hospedagem primeiro.

Quando você precisa habilitar o xmlrpc.php?

Pode haver algumas ocasiões em que você precise ativar xmlrpc.php em seu site WordPress ou quando você não deve desativá-lo completamente.

Estes são:

  • Você não está executando o REST API (não recomendado, mas necessário em algumas situações), mas precisa se comunicar entre seu site WordPress e outros sistemas.
  • Você não pode atualizar o WordPress para a versão 4.4 ou superior, portanto não tem acesso à REST API. Isto pode ser devido a restrições em sua configuração de hospedagem (neste caso eu mudaria de provedor de hospedagem) ou incompatibilidade de tema ou plugins (neste caso eu os substituiria ou atualizaria).
  • Você está trabalhando com uma aplicação externa que não pode acessar o WP REST API mas pode acessar o XML-RPC (a longo prazo, eu aconselharia atualizar essa aplicação ou mudar para uma aplicação compatível com REST).

É isso aí! Nenhuma dessas razões é particularmente boa para manter a especificação XML-RPC ativada.

A única razão pela qual ele ainda está no WordPress é para compatibilidade retroativa e você só o usaria se estivesse trabalhando com sistemas ultrapassados. Para qualquer pessoa que queira manter seus sites atualizados e trabalhar com a última tecnologia, desativar o xmlrpc.php é o caminho a seguir.

Resumo

A especificação XML-RPC foi desenvolvida antes mesmo da criação do WordPress, como um meio para o WordPress se comunicar com sistemas e aplicações externas. Ela tem falhas de segurança inerentes e pode tornar seu site vulnerável a ataques.

Agora que o REST API permite que seu site se comunique com outras aplicações, você pode desativar com segurança o xmlrpc.php. Se você seguir os passos acima, ao desativá-lo, você melhorará a segurança de seu site.

Rachel McCollin

Rachel McCollin has been helping people build websites with WordPress since 2010. She's a huge fan of self-hosted WordPress and wants to help as many people as possible create an awesome website with it.