Cos'è xmlrpc.php e come disabilito XML-RPC in WordPress?
Di Eureka Studio · Aggiornato il
In breve
XML-RPC permette alle app di accedere a WordPress tramite xmlrpc.php, una porta separata che nascondere wp-login.php non chiude. Disabilitarlo è sicuro, a meno che tu non usi Jetpack o l'app mobile di WordPress. Blocca il file in .htaccess, aggiungi il filtro xmlrpc_enabled oppure usa un plugin che chiude il login via XML-RPC mantenendo i pingback. Poi verifica il risultato.
Passaggi
1Passaggio 1
Controlla se xmlrpc.php risponde
Visita yoursite.com/xmlrpc.php. Se vedi "XML-RPC server accepts POST requests only.", la porta è aperta.
2Passaggio 2
Capisci perché è importante
La Scansione della superficie di Hushfort lo prova davvero. Su un sito aperto segnala che è possibile provare password aggirando il percorso di login nascosto, e che system.multicall permette a una sola richiesta di contenere centinaia di tentativi.

3Passaggio 3
Scegli quanto chiuderlo
Apri Hushfort → Hardening della superficie e attiva Attiva l'hardening della superficie. XML-RPC parte su "Disattiva il login, mantieni i pingback (consigliato)", adatto alla maggior parte dei siti. "Disattiva completamente" è l'opzione più rigida, ma blocca Jetpack e l'app mobile ufficiale. Premi Salva le modifiche.

4Passaggio 4
Verifica che il login via XML-RPC venga rifiutato
Torna alla Panoramica e premi Esegui di nuovo la scansione. La riga XML-RPC dovrebbe ora indicare "Login disattivato: i tentativi di password vengono respinti, i pingback continuano a funzionare."

Perché è importante
Disabilitare xmlrpc.php in WordPress chiude una seconda porta di login che quasi nessun sito usa più. XML-RPC è una vecchia interfaccia di controllo remoto per WordPress. Prima che esistesse la REST API, era
il modo in cui editor desktop e app mobili pubblicavano gli articoli. È ancora incluso in ogni sito WordPress,
su /xmlrpc.php, e accetta ancora un nome utente e una password a ogni richiesta.
Questo lo rende una seconda porta di login. Nascondere wp-login.php non la tocca. Il codice di limitazione
dei login che sorveglia solo il modulo di login non la vede. E con system.multicall, una sola richiesta HTTP
può contenere centinaia di tentativi di password. Un limite che conta le richieste vede un solo
tentativo dove ce n'erano cinquecento.
Non è teoria. Abbiamo creato questo livello dopo che un negozio continuava a ricevere tentativi di password tramite XML-RPC mentre la sua pagina di login era già nascosta.
Usi XML-RPC? Probabilmente no, se nessuno di questi casi ti riguarda:
- Colleghi il sito a Jetpack.
- Pubblichi o moderi dall'app mobile ufficiale di WordPress.
- Usi un vecchio strumento di blogging desktop, o un servizio che ti chiede nome utente e password di WordPress (invece di una password delle applicazioni) per pubblicare al posto tuo.
- Ti affidi ai pingback di altri blog.
Se non sei sicuro, chiudi solo il login e mantieni i pingback. Elimini il rischio dei tentativi di password e lasci al loro posto le parti innocue. Potrai sempre diventare più rigido in seguito.
Errori comuni
- Nascondere il login e fermarsi lì. I tentativi di password si spostano semplicemente su
xmlrpc.php. - Bloccare l'intero file senza controllare. Jetpack e l'app mobile ufficiale di WordPress si collegano tramite XML-RPC. Se li usi, chiudi solo i metodi di login, oppure fai test con attenzione.
- Fidarsi di un interruttore senza testare. Alcuni metodi lasciano parti di XML-RPC che continuano a rispondere. Verifica sempre il risultato con una richiesta reale (vedi il passaggio 4, oppure controlla cosa espone il tuo sito).
- Dimenticare il livello di cache. Se una regola della CDN blocca già
xmlrpc.php, un'impostazione a livello di WordPress non mostrerà alcun effetto. Va bene così; basta sapere quale livello sta facendo il lavoro.
Senza plugin
Opzione 1: il filtro xmlrpc_enabled. Aggiungilo a un piccolo plugin must-use
(wp-content/mu-plugins/no-xmlrpc-login.php) o al functions.php del tuo tema child:
<?php
add_filter( 'xmlrpc_enabled', '__return_false' );
Disattiva i metodi XML-RPC che richiedono un login. I pingback continuano a funzionare perché non
ne hanno bisogno. Da solo non rimuove system.multicall, e il file continua a rispondere alle richieste.
Per eliminare anche il metodo multicall:
<?php
add_filter( 'xmlrpc_methods', function ( $methods ) {
unset( $methods['system.multicall'] );
return $methods;
} );
Opzione 2: bloccare il file a livello di server. Su Apache, in .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>
Su Nginx: location = /xmlrpc.php { deny all; }. È l'opzione più rigida e non costa nulla
al server, ma elimina anche pingback, Jetpack e l'app mobile, e vive fuori da
WordPress, quindi è facile dimenticarsene quando cambi hosting.
Se qualcosa va storto
- Jetpack mostra un errore di connessione. Jetpack ha bisogno di XML-RPC. Passa da "Disattiva completamente" a "Disattiva il login, mantieni i pingback", oppure rimuovi la regola dal server.
- L'app mobile di WordPress non riesce ad accedere. Stessa causa. Usa il browser sul cellulare, oppure consenti il login via XML-RPC e affidati ai limiti di login più l'autenticazione a due fattori.
- Uno strumento di pubblicazione ha smesso di pubblicare. Controlla se usa XML-RPC. La maggior parte degli strumenti moderni è passata alla REST API con le password delle applicazioni.
Con Hushfort
Hushfort Security è un plugin di sicurezza gratuito per WordPress; Hushfort Pro è il componente aggiuntivo a pagamento che si installa sopra. Il Blocco backdoor fa parte di Hushfort Pro. La Scansione della superficie, che mostra se XML-RPC è aperto, è inclusa nel plugin gratuito.
Il Blocco backdoor fa parte del livello Hardening della superficie di Hushfort. Ti offre quattro scelte:
- Disattiva il login, mantieni i pingback (consigliato): i tentativi di password tramite XML-RPC diventano impossibili, mentre pingback e trackback continuano a funzionare. Una buona scelta per i negozi online.
- Disattiva completamente: l'opzione più rigida. Jetpack e l'app mobile ufficiale non possono collegarsi.
- Disattiva solo system.multicall: chiude i tentativi in massa, lascia stare il resto.
- Non modificare: il comportamento predefinito di WordPress.
La Scansione della superficie verifica poi il risultato con richieste reali, così vedi ciò che vede un estraneo.
Anche la Protezione dal carico assegna alle richieste a xmlrpc.php un prezzo più alto di una normale visualizzazione di pagina, rallentando
il rumore che resta.
Domande frequenti
È sicuro disattivare XML-RPC in WordPress?
Nascondere la pagina di login nasconde anche xmlrpc.php?
Cos'è system.multicall?
Disattivare XML-RPC rompe i pingback?
Il filtro xmlrpc_enabled disattiva completamente XML-RPC?
Guide correlate
Come faccio un controllo di sicurezza su ciò che espone il mio sito WordPress?
Un controllo di sicurezza WordPress fatto come lo farebbe un bot: cinque richieste mostrano se login, XML-RPC e nomi utente sono esposti, e come chiuderli.
Leggi i passaggiCome limito i tentativi di accesso (login) in WordPress?
Limita i tentativi di accesso a WordPress e ferma il brute force: blocca un IP dopo pochi login falliti. Impostazioni, codice manuale e falle da chiudere.
Leggi i passaggiCome cambio l'URL di login (accesso) di WordPress?
Cambia l'URL di login di WordPress e nascondi wp-admin in cinque passaggi sicuri. Prova il nuovo URL prima di uscire e scopri come rientrare se lo scordi.
Leggi i passaggi
