Uvod u XML-RPC. Takmičenje u programiranju Šta je vidljivo u logovima servera


Njegov post također pokazuje kako se vrši autentikacija pretraživača, kao u nastavku:
$request = xmlrpc_encode_request ("methodName" , array("methodParam"));
$auth = base64_encode ($username . ":" . $password);
$header = (version_compare(phpversion(), "5.2.8"))
? array("Content-Type: text/xml" , "Authorization: Basic $auth" )
: "Tip sadržaja: text/xml\r\nOvlašćenje: Osnovno$auth " ; //
$context = stream_context_create (niz("http" => niz(
"method" => "POST" ,
"header" => $header ,
"content" => $request
)));
$webservice = "http://www.example.com/rpc";
$file = file_get_contents($webservice, false, $context);
$response = xmlrpc_decode ($file);
if (xmlrpc_is_fault($response)) (
return "xmlrpc: $response [faultString] ($response [faultCode])" ;
) drugo (
return $response ;
}
?>
1 - NAPOMENA UREDNIKA: OVO JE ISPRAVKA IZ "SandersWang dt php at gmail dot com"

prije 16 godina

Binarni nizovi (postavljeni sa xmlrpc_set_type) idu u a ...blok kao što biste očekivali. Ali nakon svakog 80. znaka, ova funkcija umeće XML entitet " ", koji je Unicode novi red, kao da izaziva premotavanje reda, što je doduše glupo.

Iako to može biti glupo, uzrokuje prave probleme za neke XML-RPC servere, kao što je http://jakarta.apache.org/xmlrpc/ (rođena Helma). Uklanjanje tih entiteta nečim sličnim

$req = preg_replace("/ /", "", xmlrpc_encode_request("my.method", $args));

radi oko problema.

prije 11 godina

Treba napomenuti da izgleda da kodiranje ništa ne kodira, samo navedite šta ide u XML zaglavlje.

Imali smo problema sa dvostruko kodiranim UTF stringovima koji se spremaju u bazu podataka kada koristimo ovu funkciju, šalju ih na apache xml-rpc servlet i pohranjuju u mysql bazu podataka. To je riješeno postavljanjem "escaping" samo na "markup" i "encoding" na "UTF-8" (ne zaboravite postaviti i "utf-8" u xmlrpc_decode).

Čini se da UTF-8 kodirani nizovi dobijaju bijeg sa svojim bajtovima kao entitetima umjesto njihovim znakovima kao entitetima.

prije 9 godina

Jeste li ikada pokušali prenijeti niz poput sljedećeg pomoću xmlrpc-a?
$var1=niz(7=>14,9=>18);

Izlazni niz izgleda sasvim drugačije! To će izgledati ovako:
$var2=niz(14,18);

Jedino rješenje koje sam pronašao je da dodam razmak indeksu:
$var3=array(" 7"=>14," 9"=>18);

Koristeći tu metodu dobićete pravi rezultat. ($var1)

prije 16 godina

Ovu funkciju treba koristiti XML-RPC klijent za kreiranje XML korisnog opterećenja za XML-RPC zahtjev;

$params = "system.methodSignature" ;
$method = "system.methodHelp" ;
$request = xmlrpc_encode_request ($method, $params);
eho ($request);
?>

Proizvodi;



system.methodHelp

system.methodSignature



Drugi argument prepoznaje tip varijable i generiše ispravnu XML-RPC strukturu. Pogledajte xmlrpc_encode() za više detalja.

prije 12 godina

Jednostavan OO klijent sa funkcijom Overload:

php metoda test_helloworld je prevedena u xmlrpc metodu test.helloworld.

klasa RpcClient(

privatne $_methods;
privatni $_context;
privatni $_url;

Funkcija __construct ($url, $user, $passwd) (
$auth = base64_encode(sprintf("%s:%s", $user,$passwd));
$this->_context = stream_context_create(niz(
"http" => niz(
"method" => "POST",
"header" => "Tip sadržaja: tekst/xml\r\n".
"Ovlašćenje: Osnovni $auth" ,

)
));
$this->_url = $url;

$this->registerMethod("Test_HelloWorld");

Funkcija __call($methodName, $params) (
if (array_key_exists($methodName,$this->_methods)) (
// na appelle la fonction RPC
$m = str_replace("_", ".", $methodName);
$r = xmlrpc_encode_request($m, $params,array("verbosity"=>"newlines_only"));
$c = $this->_context;
stream_context_set_option($c,"http","content",$r);
$f = file_get_contents($this->_url,false,$c);
$resp = xmlrpc_decode($f);
return $resp;
) drugo (
// on appelle la fonction de l"objet
call_user_method_array($methodName, $this,$params);
}
}

Privatna funkcija registerMethod ($method) (
$this->_methods[$method] = istina;
}

Uvod u XML-RPC

Na internetu postoji mnogo različitih resursa koji korisnicima pružaju određene informacije. To ne znači obične statične stranice, već, na primjer, podatke preuzete iz baze podataka ili arhiva. To može biti arhiva finansijskih podataka (kursevi, podaci o kotaciji vrijednosnih papira), vremenskih podataka ili obimnijih informacija - vijesti, članci, poruke sa foruma. Takve informacije mogu biti predstavljene posjetitelju stranice, na primjer, putem obrasca, kao odgovor na zahtjev, ili se mogu svaki put generirati dinamički. Ali teškoća je u tome što takve informacije često nisu potrebne toliko krajnjem korisniku – osobi, već drugim sistemima i programima koji će te podatke koristiti za svoje proračune ili druge potrebe.

Pravi primjer: stranica bankarske web stranice koja prikazuje kotacije valuta. Ako stranici pristupate kao običan korisnik, preko pretraživača, vidite sav dizajn stranice, banere, menije i druge informacije koje „uokviruju“ pravu svrhu pretrage – kotacije valuta. Ako trebate unijeti ove ponude u svoju online prodavnicu, ne preostaje vam ništa drugo nego ručno odabrati potrebne podatke i prenijeti ih na svoju web stranicu putem međuspremnika. I to ćete morati raditi svaki dan. Zar zaista nema izlaza?

Ako problem riješite direktno, odmah se pojavljuje rješenje: program (skripta na web stranici) kojem su potrebni podaci prima stranicu sa servera kao „običan korisnik“, analizira (parsira) rezultirajući html kod i izvlači potrebne informacije iz njega. Ovo se može uraditi sa regularnim regularnim izrazom ili korišćenjem bilo kog html parsera. Teškoća pristupa leži u njegovoj neefikasnosti. Prvo, da biste primili mali dio podataka (podaci o valutama su doslovno desetak-dva karaktera), morate primiti cijelu stranicu, a to je najmanje nekoliko desetina kilobajta. Drugo, sa bilo kakvom promjenom u kodu stranice, na primjer, promijenio se dizajn ili nešto drugo, naš algoritam za raščlanjivanje će morati biti ponovo napravljen. A to će zahtijevati priličnu količinu resursa.

Stoga su programeri došli do odluke – potrebno je razviti neku vrstu univerzalnog mehanizma koji bi omogućio transparentnu (na nivou protokola i prijenosnog medija) i jednostavnu razmjenu podataka između programa koji se mogu nalaziti bilo gdje, biti napisani na bilo kojem jeziku. i radi pod bilo kojim operativnim sistemom, sistemima i na bilo kojoj hardverskoj platformi. Takav mehanizam se sada naziva glasnim terminima “Web usluge”, “SOAP”, “uslužno orijentisana arhitektura”. Za razmjenu podataka koriste se otvoreni i vremenski testirani standardi - HTTP protokol se koristi za prijenos poruka (iako se mogu koristiti i drugi protokoli - SMTP, na primjer). Sami podaci (u našem primjeru devizni kursevi) se prenose upakovani u višeplatformski format - u obliku XML dokumenata. U tu svrhu izmišljen je poseban standard - SOAP.

Da, sada su web servisi, SOAP i XML na svačijim usnama, počinju da se aktivno implementiraju, a velike korporacije poput IBM-a i Microsofta objavljuju nove proizvode dizajnirane da pomognu potpunu implementaciju web usluga.

Ali! U našem primjeru s kursevima koji se moraju prenijeti sa web stranice banke na motor online trgovine, takvo rješenje će biti vrlo teško. Uostalom, sam opis SOAP standarda zauzima opscenih hiljadu i po stranica, i to nije sve. Za praktičnu upotrebu, takođe ćete morati da naučite kako da radite sa bibliotekama i ekstenzijama trećih strana (samo počevši od PHP 5.0 on uključuje biblioteku za rad sa SOAP-om), i napisati stotine i hiljade redova sopstvenog koda. A sve ovo da se dobije nekoliko slova i brojeva je očigledno vrlo glomazno i ​​iracionalno.

Stoga postoji još jedan, moglo bi se reći, alternativni standard za razmjenu informacija - XML-RPC. Razvijen je uz učešće Microsofta od strane UserLand Software Inc i dizajniran je za objedinjeni prenos podataka između aplikacija preko Interneta. Može zamijeniti SOAP pri izgradnji jednostavnih servisa gdje nisu potrebne sve mogućnosti "preduzeća" pravih web usluga.

Šta znači skraćenica XML-RPC? RPC je skraćenica od Remote Procedure Call. To znači da aplikacija (bilo skripta na serveru ili obična aplikacija na klijentskom računaru) može transparentno koristiti metodu koja se fizički implementira i izvršava na drugom računaru. XML se ovdje koristi da obezbijedi univerzalni format za opisivanje prenesenih podataka. Kao transport, HTTP protokol se koristi za prijenos poruka, koji vam omogućava nesmetanu razmjenu podataka putem bilo kojeg mrežnog uređaja - rutera, firewall-a, proxy servera.

I tako, za korištenje morate imati: XML-RPC server koji pruža jednu ili više metoda, XML-RPC klijent koji može generirati ispravan zahtjev i obraditi odgovor servera, kao i znati parametre servera neophodne za uspješan rad - adresa, naziv metode i proslijeđeni parametri.

Sav rad sa XML-RPC-om odvija se u režimu „zahtjev-odgovor“, to je jedna od razlika između tehnologije i SOAP standarda, gdje postoje i koncepti transakcija i mogućnost upućivanja odloženih poziva (kada server sprema zahtjev i odgovara na njega u određenom trenutku u budućnosti). Ove dodatne karakteristike su korisnije za moćne korporativne usluge, značajno komplikuju razvoj i podršku servera i postavljaju dodatne zahtjeve programerima klijentskih rješenja.

Procedura za rad sa XML-RPC-om počinje formiranjem zahtjeva. Tipičan zahtjev izgleda ovako:

POST /RPC2 HTTP/1.0
Korisnički agent: eshop-test/1.1.1 (FreeBSD)
Host: server.localnet.com
Content-Type: text/xml
Dužina sadržaja: 172



TestMethod
Zdravo XML-RPC!


Prvi redovi čine standardno zaglavlje HTTP POST zahtjeva. Obavezni parametri uključuju host, tip podataka (MIME tip), koji mora biti tekst/xml, i dužinu poruke. Standard takođe navodi da polje User-Agent mora biti popunjeno, ali može sadržavati proizvoljnu vrijednost.

Zatim slijedi uobičajeno zaglavlje XML dokumenta. Osnovni element zahtjeva je , može postojati samo jedan i ne može sadržavati takve čvorove kao djecu. To znači da jedan zahtjev može pozvati samo jednu metodu na serveru.

Linija TestMethod označava da pozivamo metodu pod nazivom TestMetod. Ako je potrebno, ovdje možete odrediti ime programa ili modula koji sadrži metodu, kao i putanju do njega. XML-RPC specifikacija, iako nameće neka ograničenja na skup znakova koji se mogu koristiti za označavanje metode, njihovo tumačenje u potpunosti ovisi o implementaciji servera.

Zatim se postavljaju preneseni parametri. Ovaj odjeljak se koristi za ovo. Koji može sadržavati proizvoljan broj podelementa Koje sadrže parametar opisan tagom . Pogledat ćemo parametre i tipove podataka malo dalje. U našoj verziji, metodi se prosljeđuje jedan string parametar zatvoren u tag .

Nakon opisa svih parametara slijede završne oznake. Zahtjev i odgovor u XML-RPC-u su obični XML dokumenti, tako da sve oznake moraju biti zatvorene. Ali u XML-RPC-u nema pojedinačnih oznaka, iako su prisutne u XML standardu.

Pogledajmo sada odgovor servera. Zaglavlje HTTP odgovora je normalno; ako je zahtjev uspješno obrađen, server vraća HTTP/1.1 200 OK odgovor. Kao iu zahtjevu, morate ispravno navesti MIME tip, dužinu poruke i datum generiranja odgovora.

Samo tijelo odgovora je sljedeće:



istinito


Sada umjesto root oznake oznaka je naznačena , koji odmah sadrži rezultate obrade zahtjeva. Nažalost, odgovor ne prenosi ime metode, tako da biste ga trebali pohraniti na strani klijenta kako biste izbjegli zabunu ako se različite metode pozivaju u isto vrijeme.

Ako je došlo do greške prilikom obrade vašeg zahtjeva, umjesto Odgovor će sadržavati element , u kojem će struktura koja opisuje grešku biti ugniježđena. Opis greške sadrži numerički kod greške i tekstualni opis.

Hajde sada da ukratko pogledamo tipove podataka u XML-RPC-u. Ukupno postoji 9 tipova podataka - sedam jednostavnih i 2 složena. Svaki tip je opisan svojom oznakom ili skupom oznaka (za složene tipove).

Jednostavni tipovi:

Cijeli brojevi- oznaka ili ;

Boolean tip- oznaka , može uzeti obje vrijednosti 0/1 i true/false;

ASCII string- opisano oznakom i može sadržavati proizvoljan niz znakova;

Brojevi s pomičnim zarezom- oznaka , može sadržavati i znak broja, razlomak je odvojen tačkom;

datum i vrijeme- opisano oznakom i mora biti u skladu sa iso8601 formatom. Za dalju obradu u skriptama ovaj format je malo nezgodan, pa se uvek konvertuje prilikom slanja/primanja zahteva. Ovo se može uraditi pomoću posebne funkcije unutar biblioteke, ili, ako je nema, programer mora ručno konvertovati datum.

Posljednja jednostavna vrsta je base64 kodirani niz, što je opisano oznakom . Ovaj tip je univerzalan, može se koristiti za prijenos bilo kojih podataka između klijenta i servera, iako se obim prenesenih podataka povećava zbog takvog kodiranja. Ali to je posljedica tekstualne prirode protokola i posebno XML formata.

Složeni tipovi su predstavljeni strukturama i nizovima. Struktura je određena elementom korijena , koji može sadržavati proizvoljan broj elemenata , definirajući svaki član strukture. Član strukture je opisan sa dvije oznake: prvo, , opisuje ime člana, drugo, , sadrži vrijednost člana (zajedno sa oznakom koja opisuje tip podataka).

Nizovi nemaju imena i opisani su oznakom koji sadrži jedan element i jedan ili više podređenih elemenata , gdje su specificirani specifični podaci. Niz može sadržavati bilo koje druge tipove bilo kojim redoslijedom, kao i druge nizove, što vam omogućava da opišete višedimenzionalne nizove. Također možete opisati niz struktura. Ali činjenica da niz nema ime komplicira njegovu upotrebu u nekim slučajevima; da bi se prenijeli složeni podaci, moraju se više puta pakirati u druge tipove (na primjer, da biste prenijeli nekoliko nizova, možete svaki niz zasebno spakovati u strukturu , a zatim kreirajte jedan niz od ovih struktura).

Naravno, neko će reći da je takva lista tipova podataka veoma loša i „ne dozvoljava vam da se proširite“. Da, ako trebate prenijeti složene objekte ili velike količine podataka, onda je bolje koristiti SOAP. A za male, nezahtjevne aplikacije, XML-RPC je sasvim prikladan, štoviše, vrlo često se čak i njegove mogućnosti ispostavi da su previše! Uzimajući u obzir lakoću implementacije, veoma veliki broj biblioteka za gotovo sve jezike i platforme, i široku podršku u PHP-u, tada XML-RPC često jednostavno nema konkurenciju. Iako se ne može odmah preporučiti kao univerzalno rješenje - u svakom konkretnom slučaju mora se odlučiti prema okolnostima.

XML-RPC tehnologija se koristi u WordPress sistemu za razne lepe karakteristike kao što su pingbackovi, trackbackovi, daljinsko upravljanje sajtom bez prijavljivanja na admin panel, itd. Nažalost, napadači ga mogu koristiti za izvođenje DDoS napada na web stranice. Odnosno, kreirate prekrasne, zanimljive WP projekte za sebe ili po narudžbi, a u isto vrijeme, bez sumnje, možete biti dio DDoS botneta. Povezujući desetine i stotine hiljada lokacija zajedno, loši ljudi stvaraju snažan napad na svoju žrtvu. Iako istovremeno i vaša stranica pati, jer... opterećenje ide na hosting na kojem se nalazi.

Dokazi o takvoj lošoj aktivnosti mogu biti u zapisnicima servera (access.log u nginx), koji sadrže sljedeće redove:

103.238.80.27 - - "POST /wp-login.php HTTP/1.0" 200 5791 "-" "-"

No, vratimo se na XML-RPC ranjivost. Vizuelno se manifestuje u sporom otvaranju sajtova na vašem serveru ili nemogućnosti da se uopšte učitaju (502 Bad Gateway greška). Tehnička podrška mog FASTVPS domaćina potvrdila je moja nagađanja i savjetovala:

  1. Ažurirajte WordPress na najnoviju verziju zajedno sa dodacima. Općenito, ako pratite, možda ste pročitali o potrebi za instaliranjem najnovije verzije 4.2.3. zbog sigurnosnih kritika (baš kao i prethodne verzije). Ukratko, dobro je ažurirati.
  1. Instalirajte dodatak Disable XML-RPC Pingback.

Onemogućavanje XML-RPC-a u WordPress-u

Ranije mi se čini da je opcija za uključivanje/isključivanje XML-RPC-a bila negdje u sistemskim postavkama, ali sada je ne mogu pronaći tamo. Stoga je najlakši način da ga se riješite korištenjem odgovarajućeg dodatka.

Pronađite i preuzmite Onemogući XML-RPC Pingback ili ga instalirajte direktno sa administrativnog panela sistema. Ne morate ništa dodatno konfigurirati, modul počinje s radom odmah. Uklanja metode pingback.ping i pingback.extensions.getPingbacks iz XML-RPC interfejsa. Osim toga, uklanja X-Pingback iz HTTP zaglavlja.

U jednom od blogova sam pronašao još par opcija za uklanjanje onemogućavanja XML-RPC-a.

1. Onemogućite XML-RPC u predlošku.

Da biste to učinili, dodajte sljedeći red u datoteku functions.php teme:

Naredi odbijanje, Dozvoli odbijanje od svih

Ja lično nisam koristio zadnje dvije metode, jer... Povezao sam dodatak Disable XML-RPC Pingback - mislim da će to biti dovoljno. Samo za one koji ne vole nepotrebne instalacije, predložio sam alternativne opcije.

Počevši od subote u podne, moj server, na kojem se nalazi oko 25 Wordpress stranica, počeo je da doživljava ozbiljna usporavanja. Pošto sam uspeo da preživim prethodne napade ( , ) a da me ne primete, nisam odmah shvatio šta se dešava.

Kada sam to shvatio, ispostavilo se da su lozinke bile grubo forsirane + mnogo zahtjeva za XMLRPC.

Kao rezultat, uspjeli smo sve to prekinuti, ali ne odmah. Evo tri jednostavna trika kako to izbjeći.

Ove tehnike su najvjerovatnije svima poznate, ali sam nagazio na par grešaka koje nisam našao u opisima - možda će ovo nekome uštedjeti vrijeme.

1. Zaustavite pretragu, instalirajte dodatak Limit Login Attempts - instalirajte ga, pošto druge zaštite jako usporavaju server, na primjer, kada koristite dodatak Login Security Solution, server je umro nakon pola sata, dodatak jako učitava bazu podataka .

U postavkama obavezno uključite potvrdni okvir "Za proxy" - inače će odrediti IP vašeg servera za sve i automatski blokirati sve.
UPDATE, hvala, detalji su ispod u komentarima - omogućite potvrdni okvir “Za proxy” samo ako definicija ne radi kada je omogućena “Direktna veza”

2. Onemogućite XML-RPC - dodatak Disable XML-RPC (lako se aktivira i to je to).

3. Zatvorite wp-login.php - ako sajtu pristupate preko IP-a, dodatak ne radi i birači nastavljaju da ruše sajt. Da biste to izbjegli, dodajte u .htaccess:

Naredi odbijanje, Dozvoli odbijanje od svih

Kopiramo datoteku wp-login, preimenujemo je u bilo koje čudno ime, na primjer poletnormalny.php, a unutar datoteke koristimo autocorrect da promijenimo sve natpise wp-login.php u poletnormalny.php.
To je to, sada možete pristupiti admin panelu samo koristeći svoj fajl.

Nakon ova 3 jednostavna koraka, lokacije su ponovo počele letjeti i došao je mir.

Pa, odjednom je zanimljivo

Jedna od opcija je da vidite da li ste napadnuti. Ovo se može vidjeti u nginx zapisnicima (na primjer, ovdje je staza za Debian /var/log/nginx access.log datoteku).

WordPress je oduvijek imao ugrađeni alat za daljinski pristup vašoj web stranici. Zaista, ponekad morate doći do svoje stranice, ali vaš računar je daleko od vas. Dugo vremena rješenje je bila datoteka pod nazivom xmlrpc.php. Međutim, posljednjih godina ovaj fajl je postao više problem nego rješenje.

U nastavku ćemo detaljnije pogledati xmlrpc.php i zašto je stvoren. Također ćemo pogledati uobičajene sigurnosne probleme koje može uzrokovati i kako ih popraviti za vašu WordPress stranicu.

XML-RPC je WordPress funkcija koja omogućava prijenos podataka, pri čemu HTTP služi kao transport, a XML za kodiranje. Budući da WordPress nije zatvoren sistem i često komunicira sa drugim sistemima, pronađena su rješenja za ovaj problem.

Na primjer, recimo da želite objaviti na svojoj web stranici sa svog mobilnog telefona. Potrebno je da koristite daljinski pristup koji obezbeđuje xmlrpc.php.

Glavna funkcionalnost xmlrpc.php je mogućnost povezivanja na stranicu sa pametnog telefona, implementacija trackback-a i linkback-a sa drugih stranica, te neke funkcije vezane za Jetpack dodatak.

Zašto je kreiran Xmlrpc.php i kako se koristio?

Implementacija XML-RPC-a seže još u rane dane WordPress-a, pa čak i prije nego što je WordPress postao WordPress.

U ranim danima interneta, veze su bile vrlo spore, a proces snimanja i objavljivanja na webu je bio mnogo teži i dugotrajniji. Umjesto da unose promjene direktno preko pretraživača, većina ih je napravila van mreže, a zatim kopirala i zalijepila njihov sadržaj na mreži. I ovaj proces je bio daleko od idealnog.

Rješenje (u to vrijeme) je bilo kreiranje offline klijenta za bloganje gdje biste mogli sastaviti svoj sadržaj, a zatim se povezati sa svojim blogom i objaviti ga. Ova veza je napravljena putem XML-RPC-a. Uz osnovnu XML-RPC funkcionalnost, rane aplikacije koje koriste ove veze dale su ljudima mogućnost pristupa svojim WordPress stranicama s drugih uređaja.

XML-RPC danas

U 2008. godini, sa verzijom 2.6 WordPress-a, uvedena je opcija za omogućavanje ili onemogućavanje XML-RPC-a. Međutim, s izdavanjem WordPress iPhone aplikacije, podrška za XML-RPC je omogućena prema zadanim postavkama i nije bilo mogućnosti da se ona onemogući. Tako je ostalo i danas.

Naravno, funkcionalnost koju pruža ovaj fajl vremenom se značajno smanjila, a veličina fajla se smanjila sa 83kb na 3kb, više ne igra takvu ulogu kao prije.

XML-RPC svojstva

Sa novim WordPress aplikacijskim programskim interfejsom (API), možemo očekivati ​​da će XML-RPC biti potpuno onemogućen. Danas je ovaj novi API još uvijek u testiranju i može se omogućiti samo putem posebnog dodatka.

Iako možete očekivati ​​da će API biti uključen direktno u WordPress jezgro u budućnosti, eliminirajući u potpunosti potrebu za xmlrpc.php.

Novi API nije savršen, ali pruža dobru, pouzdanu sigurnost, za razliku od xmlrpc.php.

Zašto onemogućiti Xmlrpc.php

Najveći problem sa XML-RPC-om je sigurnost. Problem nije direktno povezan sa XML-RPC-om, ali se može koristiti za omogućavanje napada na vašu web lokaciju.

Naravno, možete se zaštititi jakom lozinkom i WordPress sigurnosnim dodacima. Ali najbolji način zaštite je jednostavno ga isključiti.

Postoje dvije glavne slabosti XML-RPC-a koje su korištene u prošlosti.

Prvi koristi napade grube sile da bi dobio pristup vašoj web-lokaciji. Napadač će pokušati da pristupi vašoj veb lokaciji koristeći xmlrpc.php pokušavajući različite kombinacije korisničkih imena i lozinki. Oni mogu efikasno koristiti jednu naredbu za testiranje stotina različitih lozinki. Ovo im omogućava da zaobiđu sigurnosne alate koji bi inače otkrili i blokirali napade grube sile.

Drugi je da se stranica isključi putem DDoS napada. Hakeri će koristiti obrnuto obavještenje u WordPress-u kako bi ga poslali na hiljade lokacija u isto vrijeme. Ova xmlrpc.php funkcionalnost daje hakerima skoro beskonačan broj IP adresa za propagiranje DDoS napada.

Da biste provjerili radi li XML-RPC na vašoj web lokaciji, možete ga pokrenuti pomoću alata koji se zove XML-RPC Validator. Pokrenite svoju web lokaciju pomoću alata i ako dobijete grešku, to znači da nemate podršku za XML-RPC.

Ako dobijete poruku o uspjehu, možete zaustaviti xmlrpc.php koristeći jedan od dva pristupa u nastavku.

Metod 1: Onemogućite Xmlrpc.php pomoću dodatka

Onemogućavanje XML-RPC-a na vašoj WordPress stranici je nevjerovatno jednostavno.

Idi na odjeljak Dodaci › Dodaj novo u vašoj WordPress administratorskoj konzoli. Pronađite dodatak Onemogućite XML-RPC i instalirajte ga, izgleda kao na slici ispod:

Aktivirajte dodatak i gotovi ste. Ovaj dodatak će automatski umetnuti potreban kod da onemogući XML-RPC.

Međutim, zapamtite da instalirani dodaci mogu koristiti dijelove XML-RPC-a, a njegovo onemogućavanje može uzrokovati sukob između dodataka ili njihovih pojedinačnih dijelova i izbaciti ih iz radnog načina.

Ako želite samo onemogućiti pojedinačne XML-RPC elemente, ali dozvoliti drugim dodacima i funkcijama da rade, pogledajte dodatke poput ovih:

  • Zaustavite XML-RPC napad. Ovaj dodatak će zaustaviti sve XML-RPC napade, ali će omogućiti dodacima kao što je Jetpack i drugim automatizovanim alatima i dodacima da nastave da rade dajući im pristup datotekama xmlrpc.php.
  • Kontrolirajte XML-RPC Publishing. Ovo vam omogućava da zadržite kontrolu i objavljujete na daljinu.

Metod 2: Onemogućite Xmlrpc.php ručno

Ako ne želite da koristite dodatak i radije to radite ručno, slijedite ovaj pristup. Zaustavit će sve dolazne zahtjeve xmlrpc.php prije nego što se proslijede u WordPress.

Otvorite .htaccess datoteku. Možda ćete morati omogućiti 'prikaži skrivene datoteke' u vašem upravitelju datoteka ili FTP klijentu da biste pronašli ovu datoteku.

Zalijepite ovaj kod u datoteku .htaccess:

# Blokirajte WordPress xmlrpc.php zahtjeve naruči odbije, dozvoli zabrani od svih dozvoli od 123.123.123.123

Final Thoughts

Sve u svemu, XML-RPC je bio solidno rješenje za neke od problema koji su dolazili s daljinskim objavljivanjem na vašoj WordPress stranici. Međutim, istovremeno su se pojavile neke sigurnosne rupe koje su se pokazale prilično opasnim za neke vlasnike WordPress stranica.

Da bi vaša web lokacija bila sigurna, preporučuje se da potpuno onemogućite xmlrpc.php osim ako vam nisu potrebne neke od funkcija koje zahtijevaju udaljeno objavljivanje i dodatak Jetpack. Zatim možete koristiti zaobilazne dodatke koji vam omogućavaju da koristite ove funkcije dok krpite sigurnosne rupe.

S vremenom možemo očekivati ​​da će se XML-RPC funkcionalnost integrirati u novi WordPress API koji će podržavati daljinski pristup bez žrtvovanja sigurnosti.

Jeste li blokirali pristup XML-RPC-u putem dodatka ili ručno? Ili je bilo sigurnosnih problema jer je ranije bio aktivan? Podijelite svoje iskustvo u komentarima ispod.