Respostas:
Desde o WordPress 3.5, esta opção ( XML-RPC
) é ativada por padrão, e a capacidade de desativá-la do WordPress dashboard
desaparece.
Adicione este snippet de código para uso em functions.php
:
// Disable use XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );
// Disable X-Pingback to header
add_filter( 'wp_headers', 'disable_x_pingback' );
function disable_x_pingback( $headers ) {
unset( $headers['X-Pingback'] );
return $headers;
}
Embora faça o que diz, pode ficar intensivo quando um site está sob ataque ao atingi-lo.
Você pode usar o seguinte snippet de código no seu .htaccess
arquivo.
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>
Ou use-o para desativar o acesso ao xmlrpc.php
arquivo no bloco do servidor NGINX.
# nginx block xmlrpc.php requests
location /xmlrpc.php {
deny all;
}
Esteja ciente de que a desativação também pode ter impacto nos logins pelo celular. Se eu estiver correto, o aplicativo móvel do WordPress precisa disso.
Veja Codex para mais informações sobre o uso deXML-RPC
.
- Faça sempre um backup do (s) arquivo (s) antes de editar / adicionar.
@Prosti, -Você está absolutamente correto- sobre as opções que RESTful API
oferecerão para o WordPress!
Eu esqueci de mencionar isso. Ele já deveria ter sido integrado ao núcleo ( WordPress versão 4.1 ), o que não era possível naquele momento. Mas, ao que parece, será essencial no WordPress 4.5.
A alternativa no momento é este plugin: API REST do WordPress (versão 2)
Você pode usá-lo até que Restful API
também seja essencial para o WordPress.
Data prevista para o lançamento do WordPress 4.5. (12 de abril de 2016 (+ 3 sem))
Para aqueles que estão interessados
RESTful
, no Stackoverflow é um wiki muito bom da comunidade.
X-Pingback
cabeçalho para uma única postagem / página. Precisamos usar outro filtro para removê-lo completamente: add_filter('pings_open', '__return_false', PHP_INT_MAX);
.
functions.php
perderá todo o efeito ao alterar os temas. function.php
é apenas para fins de design, use um plugin!
=
) ausente na primeira linha do código conf nginx. Isso funcionou para mim: # location = /xmlrpc.php {
Estamos usando o arquivo htaccess para protegê-lo contra hackers.
# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php
Quando você pode bloqueá-lo através da configuração do servidor da web, as sugestões do @Charles são boas.
Se você só pode desativá-lo usando php, o xmlrpc_enabled
filtro não é o caminho certo. Como documentado aqui:
https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/
, desativa apenas métodos xml rpc que requerem autenticação.
Em vez disso, use o xmlrpc_methods
filtro para desativar todos os métodos:
<?php
// Disable all xml-rpc endpoints
add_filter('xmlrpc_methods', function () {
return [];
}, PHP_INT_MAX);
Você pode testar se está funcionando enviando uma solicitação POST para xmlrpc.php com o seguinte conteúdo:
<methodCall>
<methodName>system.listMethods</methodName>
</methodCall>
Se o filtro estiver funcionando, restarão apenas três métodos:
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<string>system.multicall</string>
</value>
<value>
<string>system.listMethods</string>
</value>
<value>
<string>system.getCapabilities</string>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>
você pode testá-lo rapidamente com curl:
curl -X POST \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/xml' \
-d '<methodCall><methodName>system.listMethods</methodName></methodCall>' \
https://your-wordpress-site.com/xmlrpc.php
A melhor coisa a fazer é desativar as xmlrpc.php
funções com um plug-in em vez de excluir ou desativar o próprio arquivo. O arquivo em si será substituído nas atualizações principais do WordPress, enquanto um plug-in o manterá desativado após as atualizações principais e se você alterar os temas.
Veja https://wordpress.org/plugins/search.php?q=disable+xml-rpc para obter diferentes plugins. Todos eles têm pequenas diferenças.
Esses plug-ins fazem a mesma coisa que uma função adicionada ao functions.php
arquivo do tema ou adicionando uma order,allow deny
regra ao .htaccess (conforme descrito em outras respostas), com a diferença de que um plug-in ou função desativa as chamadas xmlrpc.php
via PHP e a regra no .htaccess funciona aproveitando o mod_rewrite no servidor da web (ou seja, Apache ou Nginx). Não há diferença significativa de desempenho entre o uso de PHP e mod_rewrite em um servidor moderno.
Para a minoria extrema que hospeda o WordPress no IIS, você pode usar o módulo IIS URL Rewrite para fazer restrições semelhantes ao htaccess. O exemplo abaixo pressupõe que o IP do cliente verdadeiro está chegando no cabeçalho X-Forwarded-For, o IP da lista de desbloqueio conhecido é 55.55.555.555 e que você deseja responder com um HTTP 404 para IPs que não sejam da lista de desbloqueio.
<rule name="wordpress-restrictions" enabled="true" stopProcessing="true">
<match url="(^xmlrpc.php)|(^wp-admin)|(^wp-login.php)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_X_FORWARDED_FOR}" pattern="(^55\.55\.555\.555$)" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="404" subStatusCode="44" statusReason="File or directory not found" statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>
Da primeira maneira, você pode colocar o código add_filter('xmlrpc_enabled', '__return_false');
no arquivo functions.php
ou no plug-in específico do site. Colocá-lo claramente no site é mais recomendado do que editar o arquivo functions.php
.
Instalei recentemente o Wordfence que, a partir da versão 6.3.12, pode bloquear o acesso direto a qualquer local. Colocar /xmlrpc.php na página Opções na lista de IPs de acesso proibido "Bloquear imediatamente IPs que acessam esses URLs" agora está mostrando uma tentativa de bloqueio a cada 15 minutos.
Isso também tem a vantagem de poder bloquear uma URL para escapar daqueles bots traquinas que retornam com um endereço IP diferente várias vezes.
Não sei se ele permite o uso do xmlrpc.php pelo Apps para operações válidas.
Eu tive alguns problemas com a produção de erros 504 Timeout e 502 Bad Gateway no servidor no início, mas parece que ele se acalmou.
Muito impressionado com o resultado até agora e produziu um valioso perfil de limpeza após o site ter sido hackeado antes de instalar o Wordfence e apesar de sempre ter a versão mais recente do WordPress e plugins.
/xmlrpc.php
uma regra de segurança que proíbe IPs que acessam, parece que ele pode bloquear o tráfego legítimo. Se um site com pingbacks ativado vincular ao seu site, ele enviará uma solicitação para esse URL e será imediatamente bloqueado ... parece que isso pode causar problemas.