XML-RPC è una specifica che mira a standardizzare le comunicazioni tra sistemi diversi. Utilizza HTTP come meccanismo di trasporto e XML come meccanismo di codifica che consente di trasmettere un’ampia gamma di dati.

Per noi gente di WordPress, la parte più importante di questa definizione è “sistemi diversi”. WordPress ha bisogno di comunicare con altri sistemi di volta in volta diversi, e fino a poco tempo fa XML-RPC era il miglior candidato per questo lavoro. Quando si comunica con altri sistemi di blogging come Blogger o Movable Type, o quando si pubblicano post da client desktop o app mobili ufficiali, XML-RPC era ed è ancora lì per aiutarvi.

Perché abbiamo scritto tutto al passato? Molto presto la nuova API di WP prenderà il suo posto, ed è un’API RESTful che offre maggiore flessibilità, migliore sicurezza e tutti contenti intorno al tavolo. Tuttavia, dal momento che WordPress si basa sulla retrocompatibilità, XML-RPC sarà in circolazione per molto tempo, quindi possiamo anche fare la sua conoscenza!

La Storia di XML-RPC in WordPress

Sapete quando XML-RPC è stato implementato in WordPress? Nella versione 3.4, 2.1, o forse nlla 1.2? No, domanda trabocchetto. Faceva parte del software di blogging originale b2, da cui è nato WordPress. Questo succedeva quando la versione zippata era di 268kb e c’erano più file e cartelle i cui nomi iniziavano con “b2” che “wp”.

La logica dell’intero sistema era contenuta nel file xmlrpc.php nella directory principale. Conteneva funzioni come wp_insert_post(), wp_delete_post() e così via.

Originariamente XML-RPC era disattivato di default, e dovevate andare su Impostazioni > Scrittura > Pubblicazione remota per abilitarlo. A partire dalla versione 3.5, la funzionalità è attiva di default.

XML-RPC Oggi

Dopo aver subito una serie di modifiche, la dimensione di questo file è diminuita da 83kb a soli 3kb, la maggior parte delle funzionalità è ora nascosta in una piccola e ordinata classe. Questa classe si chiama wp_xmlrpc_server e può essere trovata in wp-includes/class-wp-xmlrpc-server.php e contiene 48 funzioni WordPress, 7 funzioni Blogger, 6 funzioni MetaWeblog, 8 funzioni MovableType e 4 funzioni per i pingback.

Come ho detto prima, queste non sono molto ben documentate, quindi dovrete aprire questo file e dare un’occhiata alla classe da soli. C’è anche un articolo su Tuts+ sulla programmazione con XML-RPC, ma questo è praticamente tutto.

XML-RPC in Futuro

L’avvento della nuova API di WP vedrà il declino di XML-RPC. L’API di WordPress può già essere utilizzata, ma richiede l’attivazione del plugin ed è ancora in fase di test. Fra non molto, farà parte del core di WordPress, e a questo punto inizierà a invadere il territorio di XML-RPC.

Al momento, ci sono alcune funzionalità che mancano ancora all’API di WordPress, sebbene sia molto più potente per altre cose rispetto a XML-RPC. Date un’occhiata all’eccellente confronto sul sito web dell’API di WP.

I Problemi con XML-RPC

Le due maggiori risorse dell’API sono la sua estendibilità e la sua sicurezza. XML-RPC utilizza l’autenticazione di base. Invia il nome utente e la password con ogni richiesta, ed è una cosa da non fare per ragioni di sicurezza.

L’API di WordPress può utilizzare Oauth, che non invia mai nome utente e password, utilizza una token per l’autenticazione, rendendo tutto molto più sicuro.

In aggiunta, le funzioni e i metodi non devono essere codificati nell’implementazione specifica. Potete (già) aggiungere i vostri endpoint per creare tutto ciò che desiderate, non siete limitati all’aggiunta di post, alla gestione delle tassonomie e degli utenti, ecc.

Sebbene possiate estendere anche XML-RPC, la procedura non è ben documentata e non è potente come l’API concorrente.

JSON contro XML è un altro argomento per il quale XML-RPC potrebbe non essere all’altezza. L’API utilizza JSON per inviare e ricevere dati, cosa preferita dagli sviluppatori grazie alla sua facilità d’uso sia nei linguaggi lato server che client. XML può diventare un po’ complicato, dato che richiede una lettura corretta delle classi PHP.

Ultimo, ma non meno importante, negli ultimi anni XML-RPC è diventato un bersaglio sempre più grande per gli attacchi brute force. Questo non ha nulla a che vedere con nessuna vulnerabilità della sicurezza, ma riguarda un altro percorso in WordPress. Quando si utilizza XML-RPC per effettuare chiamate, è necessario fornire un nome utente e una password e il sistema darà conferma quando la coppia è valida.

Migliorare XML-RPC

Se non utilizzate affatto XML-RPC, forse la cosa migliore da fare è disabilitarlo. C’è un plugin gratuito chiamato Disable XML-RPC che fa proprio questo. Anche il plugin premium Perfmatters (sviluppato da un membro del team di Kinsta) consente di disabilitare XML-RPC, oltre ad offrire altre ottimizzazioni per il vostro sito WordPress.

Disabilitare XML-RPC con perfmatters

Disabilitare XML-RPC con perfmatters

Oppure potete farlo con il codice, aggiungendo quanto segue a un plugin o a un tema (sebbene questo sia sicuramente ambito di un plugin):

add_filter( 'xmlrpc_enabled', '__return_false' );

L’altro problema che potete prevenire sono i tentativi di accesso brute force. Questi plugin bloccheranno l’accesso una volta che sono stati fatti un paio di tentativi falliti. All In One WP Security And Firewall è un plugin più elaborato, ma potete utilizzare alcuni strumenti più specifici come Login Lockdown. Personalmente preferisco utilizzare plugin più specifici, per ridurre il l’impronta dei plugin.

Verificare XML-RPC sul Vostro Sito WordPress

Non siete sicuri che XML-RPC sia in esecuzione sul vostro sito web? Danilo Ercoli, del team di Automattic, ha creato un piccolo strumento chiamato XML-RPC Validator. Potete far girare il vostro sito WordPress in questo tool per vedere se XML-RPC è abilitato. In caso contrario, vedrete un messaggio di errore, come mostrato nell’immagine che segue del blog di Kinsta.

validare wordpress xmlrpc

Come Fermare un Attacco XML-RPC in WordPress

Da Kinsta, quando viene rilevato un attacco tramite XML-RPC, viene aggiunto nel file di configurazione nginx un piccolo frammento di codice per bloccarlo mentre è in corso, producendo un errore 403.

location ~* ^/xmlrpc.php$ {
return 403;
}

Riepilogo

A mio parere, l’XML-RPC di WordPress era un ottimo sistema, ma è tempo di passare all’API di WP. Per via della compatibilità con le versioni precedenti, gli sviluppatori dovrebbero ancora conoscere XML-RPC ed essere in grado di utilizzarlo, ma questo diventerà sempre meno utilizzato nel tempo.


Se ti è piaciuto questo articolo, allora apprezzerai la piattaforma di hosting WordPress di Kinsta. Metti il turbo al tuo sito web e ricevi supporto 24x7 dal nostro team di veterani di WordPress. La nostra infrastruttura potenziata da Google Cloud è centrata su scaling automatico, performance e sicurezza. Permettici di mostrarti la differenza di Kinsta! Scopri i nostri piani