Hushfort

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

  1. 1Passaggio 1

    Controlla se xmlrpc.php risponde

    Visita yoursite.com/xmlrpc.php. Se vedi "XML-RPC server accepts POST requests only.", la porta è aperta.

    yoursite.com/xmlrpc.php che risponde: XML-RPC server accepts POST requests only
  2. 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.

    Scansione della superficie nella Panoramica di Hushfort: XML-RPC aperto, con anche system.multicall aperto, più l'elenco utenti REST e la scansione autori che lasciano trapelare il nome utente demo-admin
  3. 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.

    Hardening della superficie attivato, con XML-RPC impostato su Disattiva il login, mantieni i pingback (consigliato)
  4. 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."

    Scansione della superficie dopo la correzione: XML-RPC, elenco utenti REST, scansione autori ed elenco autori nella sitemap tutti chiusi

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?

Per la maggior parte dei siti, sì. Il WordPress moderno usa la REST API per l'editor a blocchi e per quasi tutte le integrazioni. XML-RPC è ancora usato da Jetpack, dall'app mobile ufficiale di WordPress e da alcuni vecchi strumenti di pubblicazione, quindi controlla prima quelli.

Nascondere la pagina di login nasconde anche xmlrpc.php?

No. xmlrpc.php accetta nomi utente e password per conto suo, quindi gli attaccanti possono continuare a tentare lì anche dopo che hai nascosto wp-login.php.

Cos'è system.multicall?

Un metodo XML-RPC che esegue molte chiamate in una sola richiesta. Gli attaccanti lo usano per inviare centinaia di tentativi di password in un'unica richiesta, eludendo i limiti che contano le richieste.

Disattivare XML-RPC rompe i pingback?

Bloccare l'intero file sì. Chiudere solo il login via XML-RPC, lasciando aperto il metodo pingback, mantiene funzionanti pingback e trackback.

Il filtro xmlrpc_enabled disattiva completamente XML-RPC?

No. Disattiva solo i metodi che richiedono un login. Il file risponde ancora e le chiamate pingback continuano a funzionare. Spesso è proprio ciò che vuoi, ma verifica il risultato.

Segnala un bug o richiedi una funzione

Il tuo messaggio arriva direttamente al team che sviluppa Hushfort.

Di cosa si tratta?

Usata solo per risponderti.

Usiamo questi dati solo per risponderti. Privacy