Come disabilitare XML-RPC in WordPress e perché dovresti farlo
XML-RPC è un protocollo che permette ad applicazioni esterne di comunicare con WordPress. È il sistema che consente di pubblicare articoli da app mobile, ricevere pingback e usare strumenti di gestione remota. Tuttavia, è anche uno dei vettori di attacco più sfruttati dai bot. In questa guida ti spiego cos’è, perché è un rischio e come disabilitarlo.
Cos’è XML-RPC e a cosa serve
Il file xmlrpc.php si trova nella root della tua installazione WordPress ed espone un’interfaccia che accetta richieste remote. Storicamente serviva per:
- Pubblicazione remota: permetteva di scrivere e pubblicare articoli da applicazioni desktop come Windows Live Writer o da app mobile.
- Pingback e trackback: gestiva le notifiche tra blog quando un sito linkava un altro.
- Jetpack: il plugin Jetpack di Automattic usa XML-RPC per comunicare con i server WordPress.com.
Con l’introduzione della REST API in WordPress 4.7, la maggior parte di queste funzionalità è stata sostituita da un sistema più moderno e sicuro. L’app mobile di WordPress, ad esempio, ora usa la REST API. XML-RPC rimane attivo per retrocompatibilità, ma nella maggior parte dei casi non serve più.
Perché XML-RPC è un rischio per la sicurezza
XML-RPC è un bersaglio preferito dagli attaccanti per diverse ragioni:
- Attacchi brute force amplificati: tramite il metodo system.multicall, un attaccante può testare centinaia di combinazioni username/password in una singola richiesta HTTP. I plugin che limitano i tentativi di login su wp-login.php non proteggono XML-RPC.
- Attacchi DDoS via pingback: un attaccante può usare il tuo server come amplificatore per attacchi DDoS inviando richieste pingback false verso un sito bersaglio.
- Enumerazione utenti: attraverso XML-RPC è possibile scoprire i nomi utente validi del sito.
Controlla i log del tuo server: è molto probabile che troverai migliaia di richieste POST verso xmlrpc.php provenienti da bot.
Verificare se XML-RPC è attivo
Per verificare se il tuo sito ha XML-RPC attivo, apri il browser e vai a:
https://tuodominio.com/xmlrpc.php
Se vedi il messaggio “XML-RPC server accepts POST requests only”, significa che XML-RPC è attivo e raggiungibile. Se ricevi un errore 403 o 404, è già disabilitato.
Puoi anche usare il servizio online xmlrpc.eritreo.it per testare se il tuo XML-RPC risponde a richieste.
Metodo 1: disabilitare XML-RPC con un filtro PHP
Il metodo più pulito è aggiungere un filtro nel file functions.php del tuo tema child o in un plugin personalizzato:
add_filter('xmlrpc_enabled', '__return_false');
Questa singola riga disabilita tutte le funzionalità XML-RPC a livello applicativo. WordPress risponderà comunque alle richieste ma restituirà un errore. Il vantaggio è che PHP viene comunque eseguito, quindi il server processa la richiesta. Per bloccare le richieste prima che raggiungano PHP, usa il metodo seguente.
Metodo 2: bloccare l’accesso a livello server
Bloccare le richieste a xmlrpc.php direttamente nel server web è più efficiente perché la richiesta viene respinta prima di caricare WordPress e PHP.
Per Apache (.htaccess):
<Files xmlrpc.php> Order Allow,Deny Deny from all </Files>
Per Nginx:
location = /xmlrpc.php {
deny all;
return 403;
}
Questo metodo restituisce un errore 403 Forbidden senza eseguire nessun codice PHP, risparmiando risorse del server.
Metodo 3: usare un plugin
Se non ti senti a tuo agio con la modifica dei file, puoi usare il plugin Disable XML-RPC. Lo installi, lo attivi e XML-RPC viene disabilitato. Nessuna configurazione necessaria. In alternativa, plugin di sicurezza come Wordfence permettono di bloccare l’accesso a xmlrpc.php dalle impostazioni del firewall.
Cosa fare se usi Jetpack
Se usi il plugin Jetpack, non puoi disabilitare completamente XML-RPC perché Jetpack lo usa per comunicare con i server WordPress.com. In questo caso, invece di bloccarlo del tutto, puoi:
- Disabilitare solo i pingback: aggiungi nel functions.php: add_filter(‘xmlrpc_methods’, function($methods) { unset($methods[‘pingback.ping’]); return $methods; });
- Limitare l’accesso per IP: permetti l’accesso a xmlrpc.php solo dagli IP di Automattic e blocca tutti gli altri.
- Usare il firewall di Wordfence: Wordfence può bloccare gli attacchi brute force su XML-RPC senza disabilitare le funzionalità legittime di Jetpack.
Monitorare le richieste a xmlrpc.php
Anche dopo aver disabilitato XML-RPC, è utile monitorare quante richieste arrivano al file per capire l’entità degli attacchi. Puoi controllare i log di accesso del server:
grep xmlrpc.php /var/log/apache2/access.log | wc -l
O per Nginx:
grep xmlrpc.php /var/log/nginx/access.log | wc -l
Se il numero è elevato (migliaia al giorno), il blocco a livello server è particolarmente importante per risparmiare risorse.
Proteggere anche la REST API
Dopo aver disabilitato XML-RPC, ricorda che la REST API di WordPress è un altro punto di ingresso che merita attenzione. Per impostazione predefinita, la REST API espone informazioni come la lista degli utenti all’endpoint /wp-json/wp/v2/users. Puoi limitare l’accesso alla REST API solo agli utenti autenticati:
add_filter('rest_authentication_errors', function($result) {
if (!is_user_logged_in()) {
return new WP_Error('rest_not_logged_in', 'Accesso non autorizzato.', array('status' => 401));
}
return $result;
});
Fai attenzione: questo blocca anche le richieste REST API legittime da plugin come i form di contatto. Un approccio più mirato è bloccare solo l’endpoint utenti:
add_filter('rest_endpoints', function($endpoints) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
return $endpoints;
});
Disabilitare XML-RPC e proteggere la REST API riduce significativamente la superficie di attacco del tuo sito WordPress.
Serve assistenza?
Se il tuo sito subisce attacchi attraverso XML-RPC o hai bisogno di disabilitarlo mantenendo la compatibilità con Jetpack, il team di SoccorsoWP può configurare tutto per te. Apri un ticket e proteggi il tuo sito.