XML-RPC este un protocol de apelare de la distanta (remote) prin care un client poate trimite un request HTTP catre un server care implementeaza XML-RPC pentru care primeste un raspuns HTTP. O astfel de apelarea poate avea parametri multipli si un singur rezultat.

WordPress XML-RPC este protocolul prin care se urmareste standardizarea comunicatiilor intre diferite sisteme. Utilizeaza HTTP ca si mecanism de transport si XML ca si mecanism de codificare pentru trimiterea unei game largi de date.

CMS-ul WordPress are nevoie din cand in cand sa comunice si sa trimita date catre diferite sisteme prin care se foloseste cu succes protocolul XML-RPC. Astfel in comunicarea cu alte sisteme de blogging precum Blogger sau Movable Type sau cand se posteaza din desktop sau din aplicatii mobile, acestea se efectuau si se efectueaza in continuare prin XML-RPC.

Acest protocol va fi inlocuit in viitorul apropiat de WP API, care aduce un plus de securitate si flexibilitate, insa momentan va mai fi pastrat si folosit.

Istoria protocolului WordPress XML-RPC

Exista cateva intrebari frecvente cand vorbim de XML-RPC cum ar fi „cand a fost intodus protocolul XML-RPC pentru prima data in WordPress?” sau „de la ce versiunea a fost introdus, 3.4, 2.1 sau 1.2?”.

De fapt XML-RPC a facut parte din soft-tul original b2 de unde ulterior a derivat WordPress-ul. La acea data arhiva sau kitul de instalare avea o marime de 256 kb si existau mai multe foldere si fisiere ce aveau prefixul b2 decat wp.

Logica din spatele intregului sistem este cuprinsa în fisierul xmlrpc.php din folderul radacina. Acesta contine functii precum wp_insert_post (), wp_delete_post () si asa mai departe.

Initial protocolul XML-RPC a fost dezactivat, ca si setare standard si era nevoie sa accesati Settings -> Writing -> Remote Publishing. De la versiunea 3.5 aceasta functionalitate este pornita din setarile default.

XML-RPC in prezent

Dupa ce a suferit o serie de modificari fisierul xmlrpc.php a scazut in dimensiune de la 83 de kb la doar 3 kb si cea mai mare parte a functionalitatii a fost „ascunsa” intr-o mica clasa PHP. Clasa se numeste wp_xmlrpc_server si se gaseste in wp-includes/class-wp-xmlrpc-server.php unde se gasesc 48 de functii WordPress, 7 functii Blogger, 6 functii MetaWeblog, 8 functii MovableType si 4 functii pentru pingback-uri.

Din pacate aceasta functie nu e foarte bine documentata, astfel trebuie deschisa si verificata sintaxa (codul sursa) a clasei respective.

XML-RPC in viitor

O data cu introducerea noului WP API, XML-RPC va fi scos din uz. De fapt WordPress API poate fi deja folosit insa are nevoie de activarea printr-un plugin si e inca in faza de testare. In viitorul apropiat va face parte din nucleul de baza WordPress dupa care va inlocui complet XML-RPC.

Momentan exista cateva caracteristici care lipsesc din WordPress API, desi in alte privinte e mult mai puternic decat XML-RPC dupa cum se poate observa in comparatia celor de la WordPress API din link-ul precedent.

Problemele sistemului XML-RPC

Cele mai importante 2 benefici ale sistemului WP API sunt flexibilitatea si securitatea, pe cand XML-RPC foloseste o autentificare de baza si trimite user-ul si parola cu fiecare solicitare sau apelare (request) ceea ce nu e recomandat, pe partea de securitate.

WordPress API foloseste Oauth care nu va trimite niciodata user-ul si parola si de asemenea pentru autentificare foloseste token-uri ceea ce mult mai sigur.

Aditional functiile si metodele nu trebuie sa fie hard-encoded intr-o implementare specifica. Se pot adauga deja propriile endpoint-uri pentru a creea orice se doreste fara a fi restrictionat doar la adaugarea de post-uri, managerierea taxonomiilor si a userilor, etc.

Deoarece nu se pot efectua „update-uri” pentru XML-RPC, si pentru acest sistem nu exista o documentatie bine pusa la punct, WP API e de preferat din acest punct de vedere. WordPress API foloseste JSON pentru trimiterea de date, ceea ce e favorizat de developeri atat pentru server side cat si client side, din cauza usurintei in folosire.

Nu in ultimul rand in ultimii ani, sistemul XML-RPC a fost folosit pentru atacuri de tip brute force si chiar DDOS. Cand se efectueaza apelari prin XML-RPC trebuie furnizat un user si o parola iar sistemul va confirma cand s-au folosit date corecte.

Recomandari pentru folosirea XML-RPC

Daca in site-ul dvs nu se foloseste XML-RPC cel mai bine ar fi sa dezactivati aceasta functionalitate. Pentru aceasta exista un plugin gratuit numit „Disable XML-RPC” prin care se poate dezactiva functia.

Acest plugin poate fi descarcat din sectiunea de Plugins si doar simpla activare a acestuia va duce la dezactivarea XML-RPC la nivelul instalarii de WordPress detinute.

De asemenea se poate dezactiva si prin adaugarea urmatoarei sintaxe intr-un plugin sau intr-o thema:

add_filter( ‘xmlrpc_enabled’, ‘__return_false’ );

Verificarea functionalitatii XML-RPC pe site-ul dumneavoastra

Daca nu sunteti sigur ca pe site-ul dvs. functioneaza sistemul XML-RPC puteti verifica relativ simplu acest aspect, prin introducerea site-ului in urmatorul link XML-RPC Validator. Daca ulterior verificarii va fi indicat un mesaj de eroare insemna ca in site-ul dvs nu e activ sistemul XML-RPC.

Stoparea unui atac de WordPress XML-RPC

Daca doriti sa opriti un atac sau un posibil atac trebuie sa copiati urmatoarea sintaxa in fisierul de configurare .htaccess din radacina site-ului:

<Files xmlrpc.php>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>