Melhor maneira de eliminar xmlrpc.php?

21

Qual é a melhor maneira de eliminar o arquivo xmlrpc.php do WordPress quando você não precisa dele?

    
por prosti 03.03.2016 / 19:48
fonte

8 respostas

24

Desde o WordPress 3.5, esta opção ( XML-RPC ) está ativada por padrão, e a capacidade de desativá-lo do WordPress dashboard desapareceu.

Adicione este snippet de código para usar 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 ser intensivo quando um site está sob ataque ao ser atingido.
É melhor você usar o seguinte snippet de código no seu arquivo .htaccess .

# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>

Ou use isso para desabilitar o acesso ao arquivo xmlrpc.php do 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 por meio do celular. Se eu estou correto WordPress aplicativo móvel precisa disso.
  Consulte Codex para obter mais informações sobre o uso de XML-RPC .

     
  • Por favor, faça sempre um backup do (s) arquivo (s) antes de editar / adicionar.
  •   

Editar / Atualizar

@Prosti, -Você está absolutamente correto- sobre as opções que RESTful API vai oferecer 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á fundamental no WordPress 4.5.

A alternativa para o momento é este plugin: API REST do WordPress (Versão 2)
Você pode usá-lo até Restful API também é fundamental para o WordPress.
Data-alvo para o lançamento do WordPress 4.5. (12 de abril de 2016 (+ 3w))

  

Para quem estiver interessado em RESTful , em Stackoverflow é um wiki da comunidade muito interessante.

    
por Charles 04.03.2016 / 00:22
fonte
4

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
    
por Jorin van Vilsteren 03.03.2016 / 20:34
fonte
4

A melhor coisa a fazer é desabilitar as funções xmlrpc.php com um plugin em vez de excluir ou desabilitar o arquivo em si. O arquivo em si será substituído nas atualizações principais do WordPress, enquanto um plug-in irá mantê-lo desativado após as atualizações principais e se você alterar os temas.

Veja enlace para plugins diferentes. Todos eles têm pequenas diferenças.

Esses plugins fazem a mesma coisa que uma função adicionada ao arquivo functions.php do tema ou adicionando uma regra order,allow deny ao .htaccess (conforme descrito em outras respostas), com a diferença sendo que um plug-in ou função desativa as chamadas para xmlrpc.php via PHP, e a regra em .htaccess funciona alavancando o mod_rewrite no servidor web (isto é, Apache ou Nginx). Não há diferença apreciável de desempenho entre usar PHP e mod_rewrite em um servidor moderno.

    
por markratledge 03.03.2016 / 20:35
fonte
3

Para a minoria extrema que está hospedando o WordPress no IIS, você pode usar o módulo IIS Rewrite para fazer restrições parecidas com o htaccess. O exemplo a seguir supõ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 a IPs não permitidos.

<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>
    
por BRass 20.09.2016 / 18:03
fonte
2

Quando você tem a capacidade de bloqueá-lo através da configuração do seu servidor web, as sugestões do @Charles são boas.

Se você puder desativá-lo apenas usando o php, o filtro xmlrpc_enabled não é o caminho certo. Como documentado aqui: enlace desabilita apenas os métodos xml rpc que exigem autenticação.

Em vez disso, use o filtro xmlrpc_methods para desativar todos os métodos:

// 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 conteúdo seguinte:

<methodCall>
    <methodName>system.listMethods</methodName>
</methodCall>

Se o filtro estiver funcionando, deve haver 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>
    
por tweber 09.04.2018 / 09:56
fonte
0

Da primeira vez, você pode colocar o código add_filter('xmlrpc_enabled', '__return_false'); no arquivo functions.php ou no plugin específico do site. É claramente recomendado colocá-lo em um site específico do que editar o arquivo functions.php .

e outras maneiras de eliminar xmlrpc

    
por yaser hamzeloy 13.06.2017 / 15:30
fonte
0

Instalei recentemente o Wordfence, que, desde a versão 6.3.12, tem a capacidade de bloquear o acesso direto a qualquer local. Colocar /xmlrpc.php na página Opções na lista de IPs de acesso banidos "Imediatamente bloquear IPs que acessam esses URLs" está mostrando uma tentativa sendo bloqueada a cada 15 minutos.

Isso também tem a vantagem de ser capaz de bloquear uma URL para escapar desses bots irritantes que voltam com um tempo diferente de endereço IP.

Eu não sei se permite o uso de xmlrpc.php por Apps para operações válidas.

Eu tive alguns problemas com ele produzindo erros 504 Timeout e 502 Bad Gateway no servidor no início, mas parece ter se acalmado.

Muito impressionado com o resultado até agora e produziu um valioso perfil de limpeza depois que o site foi invadido antes de instalar o Wordfence e apesar de sempre ter a última versão do WordPress e plugins.

Wordfence enlace

    
por Steve 15.07.2017 / 20:16
fonte
0

eu uso para o nginx este pequeno código e isso funciona 100%

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
    
por Manuel K 26.11.2018 / 11:54
fonte