Menu
Sicurezza Wordpress

Come disabilitare XML-RPC in WordPress e perché dovresti farlo

Gianluca Gentile · · 5 min di lettura

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.

Condividi: