Miglior modo per eliminare xmlrpc.php

3 mar 2016, 20:48:38
Visualizzazioni: 40.2K
Voti: 33

Qual è il modo migliore per eliminare il file xmlrpc.php da WordPress quando non ne hai bisogno?

0
Tutte le risposte alla domanda 9
5
33

Da WordPress 3.5 questa opzione (XML-RPC) è abilitata di default, e la possibilità di disattivarla dal dashboard di WordPress è stata rimossa.

Aggiungi questo snippet di codice da utilizzare nel file functions.php:

// Disabilita l'uso di XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );

// Disabilita X-Pingback nell'header
add_filter( 'wp_headers', 'disable_x_pingback' );
function disable_x_pingback( $headers ) {
    unset( $headers['X-Pingback'] );

return $headers;
}

Sebbene faccia ciò che dice, può diventare intensivo quando un sito è sotto attacco ricevendo molte richieste.
Potrebbe essere meglio utilizzare il seguente snippet di codice nel tuo file .htaccess.

# Blocca le richieste a xmlrpc.php di WordPress
<Files xmlrpc.php>
order allow,deny
deny from all
</Files>

Oppure usa questo per disabilitare l'accesso al file xmlrpc.php dal blocco server NGINX.

# Blocco richieste xmlrpc.php su nginx
location /xmlrpc.php {
    deny all;
}

Tieni presente che la disattivazione può anche avere un impatto sugli accessi da mobile. Se non sbaglio, l'app mobile di WordPress ne ha bisogno.
Vedi Codex per maggiori informazioni sull'uso di XML-RPC.

  • Assicurati sempre di fare un backup dei file prima di modificarli/aggiungerli.


Modifica/Aggiornamento

@Prosti, -hai assolutamente ragione- riguardo alle opzioni che l'RESTful API offrirà per WordPress!

Ho dimenticato di menzionarlo. Avrebbe dovuto già essere integrato nel core (WordPress versione 4.1) ma non è stato possibile all'epoca. Ma a quanto pare, sarà parte del core in WordPress 4.5.

L'alternativa per il momento è questo plugin: WordPress REST API (Versione 2)
Puoi usarlo finché l'Restful API non sarà parte del core di WordPress.
Data prevista per il rilascio di WordPress 4.5. (12 aprile 2016 (+3 settimane))

Per chi è interessato a RESTful, su Stackoverflow c'è una community wiki molto utile.

4 mar 2016 01:22:36
Commenti

Se non sbaglio, l'app mobile di WordPress non ne ha bisogno - probabilmente non sarà più necessario in futuro una volta completata la transizione all'API RESTful di WordPress (WordPress 4.5)

prosti prosti
4 mar 2016 09:55:38

Per chi ancora riceve l'header X-Pingback per post/pagina singoli. Dobbiamo usare un altro filtro per rimuoverlo completamente: add_filter('pings_open', '__return_false', PHP_INT_MAX);.

James Vu James Vu
10 ago 2016 20:02:02

Aggiungere cose del genere a functions.php farà perdere ogni effetto quando si cambia tema. function.php è solo per scopi di design, usa un plugin!

David David
20 set 2016 14:07:24

@David, certo ma le persone farebbero meglio a usare la cartella mu-plugins, invece di creare un plugin apposito. Quando le persone hanno bisogno/usano una funzione come questa, c'è un motivo e non vogliono che nessuno (neanche un amministratore) abbia la possibilità di disattivare un plugin.

Charles Charles
20 set 2016 19:14:52

Sembra che manchi un segno di uguale (=) nella prima riga del codice di configurazione nginx. Questo ha funzionato per me: location = /xmlrpc.php {

Dave Dave
7 feb 2017 21:45:56
0

Quando hai la possibilità di bloccarlo tramite la configurazione del tuo server web, i suggerimenti di @Charles sono validi.

Se puoi disabilitarlo solo utilizzando php, il filtro xmlrpc_enabled non è il modo corretto. Come documentato qui: https://developer.wordpress.org/reference/hooks/xmlrpc_enabled/ disabilita solo i metodi xml rpc che richiedono autenticazione.

Invece, utilizza il filtro xmlrpc_methods per disabilitare tutti i metodi:

<?php
// Disabilita tutti gli endpoint xml-rpc
add_filter('xmlrpc_methods', function () {
    return [];
}, PHP_INT_MAX);

Puoi testare se funziona inviando una richiesta POST a xmlrpc.php con il seguente contenuto:

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

Se il filtro funziona, dovrebbero rimanere solo 3 metodi:

<?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>

puoi testarlo rapidamente con 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
9 apr 2018 10:56:49
0

Stiamo utilizzando il file htaccess per proteggerlo dagli hacker.

# INIZIO protezione xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# FINE protezione xmlrpc.php
3 mar 2016 21:34:38
0

La cosa migliore da fare è disabilitare le funzioni di xmlrpc.php con un plugin piuttosto che eliminare o disabilitare il file stesso. Il file infatti verrà sostituito con gli aggiornamenti del core di WordPress, mentre un plugin manterrà la disabilitazione anche dopo gli aggiornamenti del core e se cambi tema.

Consulta https://wordpress.org/plugins/search.php?q=disable+xml-rpc per i diversi plugin disponibili. Presentano tutti piccole differenze.

Questi plugin fanno la stessa cosa di una funzione aggiunta al file functions.php del tema o di una regola order,allow deny aggiunta a .htaccess (come descritto in altre risposte), con la differenza che un plugin o una funzione disabilitano le chiamate a xmlrpc.php via PHP, mentre la regola in .htaccess funziona sfruttando mod_rewrite nel webserver (ad esempio Apache o Nginx). Non c'è una differenza apprezzabile nelle prestazioni tra l'uso di PHP e mod_rewrite su un server moderno.

3 mar 2016 21:35:46
0

Per l'estrema minoranza che ospita WordPress su IIS, potreste utilizzare il modulo IIS URL Rewrite per implementare restrizioni simili a quelle dell'htaccess. L'esempio seguente presuppone che il vero IP del client arrivi nell'header X-Forwarded-For, che l'IP conosciuto nella whitelist sia 55.55.555.555 e che vogliate rispondere con un HTTP 404 agli IP non presenti in whitelist.

<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="La risorsa che stai cercando potrebbe essere stata rimossa, aver cambiato nome o essere temporaneamente non disponibile." />
</rule>
20 set 2016 19:03:51
0

Il modo migliore è utilizzare il file .htaccess per bloccare tutte le richieste aggiungendo

# Blocca le richieste a xmlrpc.php di WordPress
<Files xmlrpc.php>
order deny,allow
deny from all
allow from 1.1.1.1
</Files>

alla fine del file ma se vuoi il metodo più semplice utilizzando il plugin Disable XML-RPC-API farà al caso tuo.

21 gen 2021 09:45:39
1

Ho recentemente installato Wordfence che, a partire dalla versione 6.3.12, ha la capacità di bloccare l'accesso diretto a qualsiasi posizione. Inserendo /xmlrpc.php nella pagina Opzioni all'interno della lista degli IP con accesso vietato "Blocca immediatamente gli IP che accedono a questi URL", ora mostra un tentativo bloccato circa ogni 15 minuti.

Questo ha anche il vantaggio di poter bloccare un URL per sfuggire a quei fastidiosi bot che tornano con un indirizzo IP diverso ripetutamente.

Non so se consente l'uso di xmlrpc.php da parte delle App per operazioni valide.

Inizialmente ho avuto alcuni problemi con la generazione di errori 504 Timeout e 502 Bad Gateway sul server, ma sembra essersi stabilizzato.

Sono molto impressionato dai risultati finora e ha prodotto una preziosa pulizia del profilo dopo che il sito era stato violato prima dell'installazione di Wordfence, nonostante avessi sempre l'ultima versione di WordPress e dei plugin.

Wordfence https://www.wordfence.com/

15 lug 2017 21:16:42
Commenti

Aggiungere /xmlrpc.php a una regola di sicurezza che banna gli IP che vi accedono sembra possa bloccare traffico legittimo. Se un sito con i pingback abilitati si collega al tuo sito, quel sito invierà una richiesta a quell'URL e verrà immediatamente bloccato... sembra possa causare problemi.

adam-asdf adam-asdf
22 set 2017 21:38:09
0

Utilizzo per nginx questo piccolo codice e funziona al 100%

location ~* (/wp-content/.*\.php|/wp-includes/.*\.php|/xmlrpc\.php$|/(?:uploads|files)/.*\.php$) {
deny all;
access_log off;
log_not_found off;
return 444;
}
26 nov 2018 12:54:23
0

Utilizzo di un Plugin di Sicurezza (Consigliato):

Uno dei modi più semplici per bloccare l'accesso a xmlrpc.php in WordPress è utilizzare un plugin di sicurezza come Wordfence o Sucuri Security. Questi plugin spesso includono opzioni per bloccare XML-RPC o file specifici come xmlrpc.php.

Utilizzo di Regole Lato Server Apache

<Files xmlrpc.php>
    Order Deny,Allow
    Deny from all
</Files>

Utilizzo di Regole Lato Server Nginx

location ~* /xmlrpc.php {
        deny all;
        access_log off;
        log_not_found off;
    }

Ricarica Nginx

sudo systemctl reload nginx

Disabilita XML-RPC tramite wp-config.php:

define('XMLRPC_REQUEST', false);
9 ott 2023 17:12:46