Panimula sa XML-RPC. Mga kumpetisyon sa programming Ano ang nakikita sa mga log ng server


Ipinapakita rin ng kanyang post kung paano gawin ang pagpapatunay ng browser, tulad ng nasa ibaba:
$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 " )
: "Uri ng Nilalaman: text/xml\r\nAuthorization: Basic$auth " ; //
$context = stream_context_create (array("http" => array(
"pamamaraan" => "POST" ,
"header" => $header ,
"content" => $request
)));
$webservice = "http://www.example.com/rpc";
$file = file_get_contents($webservice, false, $context);
$tugon = xmlrpc_decode ($file);
kung (xmlrpc_is_fault($response)) (
ibalik ang "xmlrpc: $response [ faultString ] ($ response [ faultCode ] )" ;
) iba pa (
ibalik ang $response ;
}
?>
1 - EDITOR NOTE: ITO AY ISANG PAG-AYOS MULA SA "SandersWang dt php at gmail dot com"

16 taon na ang nakalipas

Ang mga binary string (nakatakda sa xmlrpc_set_type) ay napupunta sa a ...i-block tulad ng inaasahan mo. Ngunit pagkatapos ng bawat ika-80 character, ipinapasok ng function na ito ang XML entity na " ", na isang Unicode newline, na para bang magdulot ng line-wrap, na tinatanggap na kalokohan.

Kalokohan man ito, nagdudulot ito ng mga tunay na problema para sa ilang XML-RPC server, tulad ng http://jakarta.apache.org/xmlrpc/ (nee Helma). Tinatanggal ang mga entity na iyon na may katulad

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

gumagana sa paligid ng problema.

11 taon na ang nakalipas

Dapat tandaan na ang pag-encode ay tila hindi nag-encode ng anuman, tukuyin lamang kung ano ang napupunta sa XML header.

Nagkaroon kami ng mga problema sa double-encoded UTF string na ini-save sa database kapag ginagamit ang function na ito, ipinapadala ito sa isang apache xml-rpc servlet at iniimbak ito sa mysql database. Nalutas ito sa pamamagitan ng pagtatakda ng "escaping" sa "markup" lang at "encoding" sa "UTF-8" (huwag kalimutang itakda din ang "utf-8" sa xmlrpc_decode).

Mukhang na-escape ang mga string na naka-encode ng UTF-8 gamit ang kanilang mga byte bilang mga entity sa halip na ang kanilang mga character bilang mga entite.

9 taon na ang nakalipas

Sinubukan mo na bang magpadala ng array tulad ng sumusunod gamit ang xmlrpc?
$var1=array(7=>14,9=>18);

Ang output array ay mukhang medyo iba! Magiging ganito ang hitsura:
$var2=array(14,18);

Ang tanging solusyon na nahanap ko ay maghanda ng puwang sa index:
$var3=array(" 7" => 14," 9" => 18);

Gamit ang paraang iyon makakakuha ka ng tamang resulta. ($var1)

16 taon na ang nakalipas

Ang function na ito ay dapat gamitin ng isang XML-RPC client para gumawa ng XML payload para sa isang XML-RPC na kahilingan;

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

Gumagawa;



sistema.paraanTulong

sistema.paraanLagda



Kinikilala ng pangalawang argumento ang uri ng variable at bumubuo ng tamang istraktura ng XML-RPC. Tingnan ang xmlrpc_encode() para sa higit pang mga detalye.

12 taon na ang nakalipas

Simpleng OO client na may function na Overload:

ang php method test_helloworld ay isinalin sa xmlrpc method test.helloworld.

klase RpcClient(

pribadong $_paraan;
pribadong $_context;
pribadong $_url;

Function __construct ($url, $user, $passwd) (
$auth = base64_encode(sprintf("%s:%s", $user,$passwd));
$this->_context = stream_context_create(array(
"http" => array(
"pamamaraan" => "POST",
"header" => "Uri ng Nilalaman: text/xml\r\n".
"Awtorisasyon: Pangunahing $auth" ,

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

$this->registerMethod("Test_HelloWorld");

Function __call($methodName, $params) (
if (array_key_exists ($methodName,$this->_methods)) (
// sa 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);
ibalik ang $resp;
) iba pa (
// on appelle la fonction de l"objet
call_user_method_array($methodName, $this,$params);
}
}

Pribadong function registerMethod ($paraan) (
$this->_methods[$method] = true;
}

Panimula sa XML-RPC

Mayroong maraming iba't ibang mga mapagkukunan sa Internet na nagbibigay sa mga user ng ilang partikular na impormasyon. Hindi ito nangangahulugan ng mga ordinaryong static na pahina, ngunit, halimbawa, ang data na nakuha mula sa isang database o mga archive. Ito ay maaaring isang archive ng data sa pananalapi (mga rate ng palitan, data ng mga securities quote), data ng panahon, o mas maraming impormasyon - mga balita, artikulo, mensahe mula sa mga forum. Ang ganitong impormasyon ay maaaring iharap sa bisita ng pahina, halimbawa, sa pamamagitan ng isang form, bilang tugon sa isang kahilingan, o maaari itong mabuo nang pabago-bago sa bawat oras. Ngunit ang kahirapan ay madalas na ang naturang impormasyon ay hindi gaanong kailangan ng end user - isang tao, ngunit ng iba pang mga system at program na gagamit ng data na ito para sa kanilang mga kalkulasyon o iba pang mga pangangailangan.

Tunay na halimbawa: isang pahina ng isang website ng pagbabangko na nagpapakita ng mga quote ng pera. Kung na-access mo ang pahina bilang isang regular na user, sa pamamagitan ng isang browser, makikita mo ang lahat ng disenyo ng pahina, mga banner, mga menu at iba pang impormasyon na "nagbabalangkas" sa tunay na layunin ng paghahanap - mga quote ng pera. Kung kailangan mong ilagay ang mga quote na ito sa iyong online na tindahan, wala nang ibang gagawin kundi manu-manong piliin ang kinakailangang data at ilipat ito sa iyong website sa pamamagitan ng clipboard. At kailangan mong gawin ito araw-araw. Wala na ba talagang daan palabas?

Kung malulutas mo ang problema, agad na lilitaw ang isang solusyon: ang isang programa (script sa isang website) na nangangailangan ng data ay tumatanggap ng isang pahina mula sa server bilang isang "regular na gumagamit", pinag-parse (pag-parse) ang nagresultang html code at kinukuha ang kinakailangang impormasyon mula rito. Magagawa ito alinman sa isang regular na regular na expression, o gamit ang anumang html parser. Ang kahirapan ng diskarte ay nakasalalay sa hindi pagiging epektibo nito. Una, upang makatanggap ng isang maliit na bahagi ng data (ang data sa mga pera ay literal na isang dosenang o dalawang character), kailangan mong matanggap ang buong pahina, na hindi bababa sa ilang sampu-sampung kilobytes. Pangalawa, sa anumang pagbabago sa code ng pahina, halimbawa, ang disenyo ay nagbago o iba pa, ang aming parsing algorithm ay kailangang muling gawin. At ito ay kukuha ng isang patas na halaga ng mga mapagkukunan.

Samakatuwid, ang mga developer ay dumating sa isang desisyon - ito ay kinakailangan upang bumuo ng ilang uri ng unibersal na mekanismo na magpapahintulot sa transparent (sa protocol at transmission medium level) at madaling pagpapalitan ng data sa pagitan ng mga programa na maaaring matatagpuan kahit saan, na nakasulat sa anumang wika at tumatakbo sa ilalim ng anumang operating system. system at sa anumang hardware platform. Ang ganitong mekanismo ay tinatawag na ngayong malakas na termino na "Mga serbisyo sa web", "SOAP", "arkitekturang nakatuon sa serbisyo". Para sa palitan ng data, ginagamit ang mga bukas at sinubok sa oras na mga pamantayan - ang HTTP protocol ay ginagamit upang magpadala ng mga mensahe (bagaman ang iba pang mga protocol ay maaaring gamitin - SMTP, halimbawa). Ang data mismo (sa aming halimbawa, mga halaga ng palitan) ay ipinadala na nakabalot sa isang cross-platform na format - sa anyo ng mga XML na dokumento. Para sa layuning ito, isang espesyal na pamantayan ang naimbento - SOAP.

Oo, ngayon ang mga serbisyo sa web, SOAP at XML ay nasa mga labi ng lahat, nagsisimula na silang aktibong ipatupad, at ang malalaking korporasyon tulad ng IBM at Microsoft ay naglalabas ng mga bagong produkto na idinisenyo upang tulungan ang kabuuang pagpapatupad ng mga serbisyo sa web.

Ngunit! Para sa aming halimbawa sa mga halaga ng palitan na dapat ipadala mula sa website ng bangko patungo sa makina ng online na tindahan, ang gayong solusyon ay magiging napakahirap. Pagkatapos ng lahat, ang paglalarawan ng pamantayan ng SOAP lamang ay tumatagal ng isang malaswang isa at kalahating libong pahina, at hindi lang iyon. Para sa praktikal na paggamit, kakailanganin mo ring matutunan kung paano magtrabaho sa mga third-party na aklatan at extension (nagsisimula lamang sa PHP 5.0 kasama na ang library para sa pagtatrabaho sa SOAP), at magsulat ng daan-daan at libu-libong linya ng iyong sariling code. At ang lahat ng ito upang makakuha ng ilang mga titik at numero ay halatang napakahirap at hindi makatwiran.

Samakatuwid, mayroong isa pa, maaaring sabihin ng isa, alternatibong pamantayan para sa pagpapalitan ng impormasyon - XML-RPC. Ito ay binuo na may partisipasyon ng Microsoft ng UserLand Software Inc at idinisenyo para sa pinag-isang paglipat ng data sa pagitan ng mga application sa Internet. Maaari nitong palitan ang SOAP kapag gumagawa ng mga simpleng serbisyo kung saan hindi kailangan ang lahat ng kakayahan ng "enterprise" ng mga tunay na serbisyo sa web.

Ano ang ibig sabihin ng abbreviation XML-RPC? Ang RPC ay nangangahulugang Remote Procedure Call. Nangangahulugan ito na ang isang application (kung isang script sa server o isang regular na application sa computer ng kliyente) ay maaaring malinaw na gumamit ng isang paraan na pisikal na ipinapatupad at isinasagawa sa isa pang computer. Ginagamit dito ang XML upang magbigay ng unibersal na format para sa paglalarawan ng ipinadalang data. Bilang isang transportasyon, ang HTTP protocol ay ginagamit upang magpadala ng mga mensahe, na nagbibigay-daan sa iyo upang walang putol na makipagpalitan ng data sa pamamagitan ng anumang mga aparato sa network - mga router, firewall, proxy server.

At kaya, para magamit kailangan mong magkaroon ng: isang XML-RPC server na nagbibigay ng isa o higit pang mga pamamaraan, isang XML-RPC client na maaaring makabuo ng tamang kahilingan at magproseso ng tugon ng server, at alam din ang mga parameter ng server na kinakailangan para sa matagumpay na operasyon - address, pangalan ng pamamaraan at mga naipasa na parameter.

Ang lahat ng trabaho sa XML-RPC ay nangyayari sa mode na "request-response", ito ay isa sa mga pagkakaiba sa pagitan ng teknolohiya at ang SOAP standard, kung saan mayroong parehong mga konsepto ng mga transaksyon at ang kakayahang gumawa ng mga naantalang tawag (kapag ang server ay nag-imbak ang kahilingan at tumugon dito sa isang tiyak na oras sa hinaharap). Ang mga karagdagang feature na ito ay mas kapaki-pakinabang para sa makapangyarihang mga serbisyong pangkorporasyon; sila ay makabuluhang nagpapalubha sa pagbuo at suporta ng mga server, at naglalagay ng mga karagdagang kinakailangan sa mga developer ng mga solusyon sa kliyente.

Ang pamamaraan para sa pagtatrabaho sa XML-RPC ay nagsisimula sa pagbuo ng isang kahilingan. Ganito ang hitsura ng isang karaniwang kahilingan:

POST /RPC2 HTTP/1.0
User-Agent: eshop-test/1.1.1 (FreeBSD)
Host: server.localnet.com
Uri ng Nilalaman: text/xml
Haba ng nilalaman: 172



Paraan ng Pagsubok
Kamusta XML-RPC!


Ang mga unang linya ay bumubuo sa karaniwang header ng kahilingan sa HTTP POST. Kasama sa mga kinakailangang parameter ang host, uri ng data (uri ng MIME), na dapat ay text/xml, at haba ng mensahe. Tinutukoy din ng pamantayan na ang field ng User-Agent ay dapat punan, ngunit maaaring maglaman ng isang arbitrary na halaga.

Susunod ay ang karaniwang header ng XML na dokumento. Ang ugat na elemento ng kahilingan ay , maaaring magkaroon lamang ng isa, at hindi maaaring maglaman ng mga naturang node bilang mga bata. Nangangahulugan ito na ang isang kahilingan ay maaari lamang tumawag sa isang paraan sa server.

Linya Paraan ng Pagsubok ay nagpapahiwatig na tinatawagan namin ang isang paraan na pinangalanang TestMetod. Kung kinakailangan, dito maaari mong tukuyin ang pangalan ng programa o module na naglalaman ng pamamaraan, pati na rin ang landas patungo dito. Ang detalye ng XML-RPC, bagama't nagpapataw ito ng ilang mga paghihigpit sa hanay ng mga character na maaaring magamit upang tukuyin ang isang pamamaraan, kung paano bigyang-kahulugan ang mga ito ay ganap na nakasalalay sa pagpapatupad ng server.

Susunod, itinakda ang mga ipinadalang parameter. Ginagamit ang seksyong ito para dito. Na maaaring maglaman ng arbitrary na bilang ng mga subelement Na naglalaman ng parameter na inilarawan ng tag . Titingnan natin ang mga parameter at uri ng data nang kaunti pa. Sa aming bersyon, ipinapasa ang paraan ng isang parameter ng string na nakapaloob sa tag .

Ang paglalarawan ng lahat ng mga parameter ay sinusundan ng pagsasara ng mga tag. Ang kahilingan at tugon sa XML-RPC ay mga regular na XML na dokumento, kaya dapat na sarado ang lahat ng mga tag. Ngunit walang iisang tag sa XML-RPC, bagama't naroroon ang mga ito sa pamantayang XML.

Ngayon tingnan natin ang tugon ng server. Normal ang header ng tugon ng HTTP; kung matagumpay na naproseso ang kahilingan, magbabalik ang server ng tugon na HTTP/1.1 200 OK. Tulad ng sa kahilingan, dapat mong tukuyin nang tama ang uri ng MIME, haba ng mensahe at petsa ng pagbuo ng tugon.

Ang katawan ng tugon mismo ay ang mga sumusunod:



totoo


Ngayon sa halip na ang root tag ipinahiwatig ang tag , na agad na naglalaman ng mga resulta ng pagproseso ng kahilingan. Sa kasamaang palad, ang tugon ay hindi pumasa sa pangalan ng pamamaraan, kaya dapat mong iimbak ito sa panig ng kliyente upang maiwasan ang pagkalito kung ang iba't ibang mga pamamaraan ay tinatawag sa parehong oras.

Kung may naganap na error habang pinoproseso ang iyong kahilingan, sa halip na Ang tugon ay maglalaman ng elemento , kung saan ilalagay ang isang istraktura na naglalarawan sa error. Ang paglalarawan ng error ay naglalaman ng isang numerong code ng error at isang paglalarawan ng teksto.

Ngayon tingnan natin ang mga uri ng data sa XML-RPC. Mayroong 9 na uri ng data sa kabuuan - pitong simpleng uri at 2 kumplikado. Ang bawat uri ay inilalarawan ng sarili nitong tag o hanay ng mga tag (para sa mga kumplikadong uri).

Mga simpleng uri:

Buong mga numero- tag o ;

Uri ng Boolean- tag , maaaring tumagal ng parehong mga halaga 0/1 at true/false;

ASCII string- inilarawan sa pamamagitan ng tag at maaaring maglaman ng arbitrary na string ng mga character;

Mga numero ng floating point- tag , ay maaari ding maglaman ng tanda ng numero, ang bahaging fractional ay pinaghihiwalay ng isang tuldok;

petsa at oras- inilarawan sa pamamagitan ng tag at dapat sumunod sa format na iso8601. Para sa karagdagang pagpoproseso sa mga script, ang format na ito ay medyo hindi maginhawa, kaya palagi itong kino-convert kapag nagpapadala/nakatanggap ng kahilingan. Magagawa ito ng isang espesyal na function sa loob ng library, o, kung wala, dapat na manu-manong i-convert ng developer ang petsa.

Ang huling simpleng uri ay base64 na naka-encode na string, na inilalarawan ng tag . Ang ganitong uri ay unibersal; maaari itong magamit upang maglipat ng anumang data sa pagitan ng kliyente at ng server, kahit na ang dami ng inilipat na data ay tumataas dahil sa naturang pag-encode. Ngunit ito ay isang kinahinatnan ng textual na katangian ng protocol at ang XML format sa partikular.

Ang mga kumplikadong uri ay kinakatawan ng mga istruktura at array. Ang istraktura ay tinutukoy ng elemento ng ugat , na maaaring maglaman ng arbitrary na bilang ng mga elemento , na tumutukoy sa bawat miyembro ng istraktura. Ang isang miyembro ng istraktura ay inilalarawan ng dalawang tag: una, , inilalarawan ang pangalan ng miyembro, pangalawa, , naglalaman ng halaga ng miyembro (kasama ang isang tag na naglalarawan sa uri ng data).

Ang mga array ay walang mga pangalan at inilalarawan ng tag na naglalaman ng isang elemento , at isa o higit pang elemento ng bata , kung saan tinukoy ang partikular na data. Ang isang array ay maaaring maglaman ng anumang iba pang mga uri sa anumang pagkakasunud-sunod, pati na rin ang iba pang mga array, na nagbibigay-daan sa iyong ilarawan ang mga multidimensional na array. Maaari mo ring ilarawan ang isang hanay ng mga istruktura. Ngunit ang katotohanan na ang array ay walang pangalan ay nagpapalubha sa paggamit nito sa ilang mga kaso; upang ilipat ang kumplikadong data, kailangan nilang paulit-ulit na i-pack sa iba pang mga uri (halimbawa, upang ilipat ang ilang mga array, maaari mong i-pack ang bawat array nang hiwalay sa isang istraktura , at pagkatapos ay lumikha ng isang array mula sa mga istrukturang ito).

Siyempre, may magsasabi na ang naturang listahan ng mga uri ng data ay napakahirap at "hindi ka pinapayagang palawakin." Oo, kung kailangan mong maglipat ng mga kumplikadong bagay o malalaking halaga ng data, mas mahusay na gumamit ng SOAP. At para sa maliliit, hindi hinihingi na mga aplikasyon, ang XML-RPC ay lubos na angkop; bukod dito, napakadalas kahit na ang mga kakayahan nito ay lumalabas na napakarami! Isinasaalang-alang ang kadalian ng pag-deploy, isang napakalaking bilang ng mga aklatan para sa halos anumang wika at platform, at malawak na suporta sa PHP, kung gayon ang XML-RPC ay kadalasang walang mga kakumpitensya. Bagaman hindi ito maaaring agad na irekomenda bilang isang unibersal na solusyon - sa bawat partikular na kaso dapat itong magpasya ayon sa mga pangyayari.

Ang teknolohiyang XML-RPC ay ginagamit sa WordPress system para sa iba't ibang magagandang feature tulad ng mga pingback, trackback, remote na pamamahala ng site nang hindi nagla-log in sa admin panel, atbp. Sa kasamaang palad, magagamit ito ng mga umaatake upang magsagawa ng mga pag-atake ng DDoS sa mga website. Iyon ay, lumikha ka ng maganda, kawili-wiling mga proyekto ng WP para sa iyong sarili o upang mag-order, at sa parehong oras, nang walang pinaghihinalaang anumang bagay, maaari kang maging bahagi ng isang DDoS botnet. Sa pamamagitan ng pagkonekta sa sampu at daan-daang libong mga site nang magkasama, ang masasamang tao ay lumikha ng isang malakas na pag-atake sa kanilang biktima. Bagama't sa parehong oras ang iyong site ay naghihirap din, dahil... ang load ay napupunta sa hosting kung saan ito matatagpuan.

Ang katibayan ng gayong masamang aktibidad ay maaaring nasa mga log ng server (access.log in nginx), na naglalaman ng mga sumusunod na linya:

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

Ngunit bumalik tayo sa kahinaan ng XML-RPC. Biswal, ito ay nagpapakita ng sarili sa mabagal na pagbubukas ng mga site sa iyong server o ang kawalan ng kakayahan na i-load ang mga ito sa lahat (502 Bad Gateway error). Kinumpirma ng teknikal na suporta ng aking FASTVPS host ang aking mga hula at pinayuhan:

  1. I-update ang WordPress sa pinakabagong bersyon kasama ng mga plugin. Sa pangkalahatan, kung susundin mo, maaaring nabasa mo ang tungkol sa pangangailangang i-install ang pinakabagong 4.2.3. dahil sa mga pagpuna sa seguridad (tulad ng mga nakaraang bersyon). In short, masarap mag-update.
  1. I-install ang Disable XML-RPC Pingback plugin.

Hindi pagpapagana ng XML-RPC sa WordPress

Noong nakaraan, tila sa akin na ang pagpipilian upang paganahin / huwag paganahin ang XML-RPC ay nasa isang lugar sa mga setting ng system, ngunit ngayon ay hindi ko ito mahanap doon. Samakatuwid, ang pinakamadaling paraan upang mapupuksa ito ay ang paggamit ng naaangkop na plugin.

Hanapin at i-download ang I-disable ang XML-RPC Pingback o i-install ito nang direkta mula sa admin panel ng system. Hindi mo kailangang i-configure ang anumang karagdagang, ang module ay nagsisimulang gumana kaagad. Tinatanggal nito ang mga pamamaraan ng pingback.ping at pingback.extensions.getPingbacks mula sa interface ng XML-RPC. Bilang karagdagan, inaalis nito ang X-Pingback mula sa mga header ng HTTP.

Sa isa sa mga blog nakakita ako ng ilang higit pang mga opsyon para sa pag-alis ng XML-RPC na hindi pagpapagana.

1. Huwag paganahin ang XML-RPC sa template.

Upang gawin ito, idagdag ang sumusunod na linya sa functions.php file ng tema:

Order Deny, Allow Deny from all

Personal kong hindi ginamit ang huling dalawang pamamaraan, dahil... Ikinonekta ko ang Disable XML-RPC Pingback plugin - Sa tingin ko ito ay sapat na. Para lamang sa mga hindi gusto ang mga hindi kinakailangang pag-install, nagmungkahi ako ng mga alternatibong opsyon.

Simula sa tanghali ng Sabado, ang aking server, kung saan ang humigit-kumulang 25 na mga site ng Wordpress ay naka-host, ay nagsimulang makaranas ng matinding paghina. Dahil nakaligtas ako sa mga nakaraang pag-atake ( , ) nang hindi napapansin, hindi ko agad naintindihan ang nangyayari.

Nang malaman ko ito, lumabas na ang mga password ay pinipilit + maraming kahilingan sa XMLRPC.

Bilang resulta, nagawa naming putulin ang lahat, bagaman hindi kaagad. Narito ang tatlong simpleng trick kung paano ito maiiwasan.

Ang mga diskarteng ito ay malamang na kilala ng lahat, ngunit natapakan ko ang ilang mga pagkakamali na hindi ko nakita sa mga paglalarawan - marahil ito ay makatipid ng oras ng isang tao.

1. Itigil ang paghahanap, i-install ang Limit Login Attempts plugin - i-install ito, dahil ang ibang mga proteksyon ay lubos na nagpapabagal sa server, halimbawa, kapag ginagamit ang Login Security Solution plugin, namatay ang server pagkatapos ng kalahating oras, ang plugin ay naglo-load nang husto sa database .

Sa mga setting, tiyaking i-on ang checkbox na "Para sa proxy" - kung hindi, matutukoy nito ang IP ng iyong server para sa lahat at awtomatikong i-block ang lahat.
I-UPDATE, salamat, ang mga detalye ay nasa ibaba sa mga komento - paganahin ang checkbox na "Para sa proxy" lamang kung ang kahulugan ay hindi gumagana kapag ang "Direktang koneksyon" ay pinagana

2. Huwag paganahin ang XML-RPC - ang Huwag paganahin ang XML-RPC plugin (madaling i-activate at iyon lang).

3. Isara ang wp-login.php - kung na-access mo ang site sa pamamagitan ng IP, hindi gagana ang plugin at patuloy na i-crash ng mga picker ang site. Upang maiwasan ito, idagdag sa .htaccess:

Order Deny, Allow Deny from all

Kinokopya namin ang wp-login file, palitan ang pangalan nito sa anumang kakaibang pangalan, halimbawa poletnormalny.php, at sa loob ng file, gumamit ng autocorrect para baguhin ang lahat ng wp-login.php inscriptions sa poletnormalny.php.
Iyon lang, maaari mo na ngayong ma-access ang admin panel gamit lamang ang iyong file.

Matapos ang 3 simpleng hakbang na ito, nagsimulang lumipad muli ang mga site at dumating ang kapayapaan.

Well, biglang naging kawili-wili

Isa sa mga pagpipilian ay upang makita kung ikaw ay inaatake. Ito ay makikita sa nginx logs (halimbawa, narito ang path para sa Debian /var/log/nginx access.log file).

Ang WordPress ay palaging may built-in na tool para sa malayuang pag-access sa iyong site. Sa katunayan, kung minsan kailangan mong pumunta sa iyong site, ngunit ang iyong computer ay malayo sa iyo. Sa mahabang panahon, ang solusyon ay isang file na tinatawag na xmlrpc.php. Gayunpaman, sa mga nakaraang taon ang file na ito ay naging higit na problema kaysa solusyon.

Sa ibaba ay titingnan natin ang xmlrpc.php at kung bakit ito ginawa. Titingnan din namin ang mga karaniwang isyu sa seguridad na maaaring idulot nito at kung paano ayusin ang mga ito para sa iyong WordPress site.

Ang XML-RPC ay isang tampok na WordPress na nagbibigay-daan sa paglipat ng data, na may HTTP na nagsisilbing transportasyon at XML para sa pag-encode. Dahil ang WordPress ay hindi isang saradong sistema at madalas na nakikipag-ugnayan sa ibang mga sistema, ang mga solusyon ay natagpuan para sa problemang ito.

Halimbawa, sabihin nating gusto mong mag-post sa iyong website mula sa iyong mobile phone. Kailangan mong gamitin ang malayuang pag-access na ibinigay ng xmlrpc.php.

Ang pangunahing functionality ng xmlrpc.php ay ang kakayahang kumonekta sa site mula sa isang smartphone, ang pagpapatupad ng mga trackback at linkback mula sa ibang mga site, at ilang mga function na nauugnay sa Jetpack plugin.

Bakit nilikha ang Xmlrpc.php at paano ito ginamit?

Ang pagpapatupad ng XML-RPC ay bumalik sa mga unang araw ng WordPress at bago pa man maging WordPress ang WordPress.

Noong mga unang araw ng internet, napakabagal ng mga koneksyon at ang proseso ng pagre-record at pag-publish sa web ay mas mahirap at matagal. Sa halip na direktang gumawa ng mga pagbabago sa pamamagitan ng browser, karamihan ay ginawa silang offline at pagkatapos ay kinopya at i-paste ang kanilang nilalaman online. At ang prosesong ito ay malayo sa perpekto.

Ang solusyon (sa panahong iyon) ay lumikha ng isang offline na kliyente sa pag-blog kung saan maaari mong isulat ang iyong nilalaman, pagkatapos ay kumonekta sa iyong blog at i-publish ito. Ang koneksyon ay ginawa sa pamamagitan ng XML-RPC. Sa pangunahing XML-RPC functionality, ang mga naunang application na gumagamit ng mga koneksyong ito ay nagbigay sa mga tao ng kakayahang ma-access ang kanilang mga WordPress site mula sa iba pang mga device.

XML-RPC ngayon

Noong 2008, na may bersyon 2.6 ng WordPress, isang opsyon ang ipinakilala upang paganahin o huwag paganahin ang XML-RPC. Gayunpaman, sa paglabas ng WordPress iPhone app, ang suporta sa XML-RPC ay pinagana bilang default at walang opsyon na i-disable ito. Ito ay nananatiling gayon ngayon.

Siyempre, ang pag-andar na ibinigay ng file na ito ay makabuluhang nabawasan sa paglipas ng panahon, at ang laki ng file ay bumaba mula 83kb hanggang 3kb, hindi na ito gumaganap ng ganoong papel tulad ng dati.

Mga Katangian ng XML-RPC

Gamit ang bagong WordPress Application Programming Interface (API), maaari nating asahan na ganap na madi-disable ang XML-RPC. Ngayon ang bagong API na ito ay nasa pagsubok pa rin at maaari lamang paganahin sa pamamagitan ng isang espesyal na plugin.

Bagama't maaari mong asahan na direktang maisama ang API sa WordPress core sa hinaharap, ganap na inaalis ang pangangailangan para sa xmlrpc.php.

Ang bagong API ay hindi perpekto, ngunit nagbibigay ito ng mahusay, maaasahang seguridad, hindi katulad ng xmlrpc.php.

Bakit hindi paganahin ang Xmlrpc.php

Ang pinakamalaking isyu sa XML-RPC ay seguridad. Ang problema ay hindi direktang nauugnay sa XML-RPC, ngunit maaari itong magamit upang paganahin ang isang pag-atake sa iyong site.

Siyempre, mapoprotektahan mo ang iyong sarili gamit ang napakalakas na password at mga plugin ng seguridad ng WordPress. Ngunit ang pinakamahusay na mode ng proteksyon ay i-off lang ito.

Mayroong dalawang pangunahing kahinaan ng XML-RPC na pinagsamantalahan sa nakaraan.

Ang una ay gumagamit ng mga malupit na pag-atake upang makakuha ng access sa iyong site. Susubukan ng umaatake na makakuha ng access sa iyong site gamit ang xmlrpc.php sa pamamagitan ng pagsubok ng iba't ibang kumbinasyon ng mga username at password. Mabisa nilang magagamit ang isang command upang subukan ang daan-daang iba't ibang mga password. Nagbibigay-daan ito sa kanila na i-bypass ang mga tool sa seguridad na karaniwang makaka-detect at makaka-block ng mga brute force na pag-atake.

Ang pangalawa ay gawing offline ang site sa pamamagitan ng pag-atake ng DDoS. Gagamitin ng mga hacker ang reverse notification sa WordPress para ipadala ito sa libu-libong site nang sabay-sabay. Ang xmlrpc.php functionality na ito ay nagbibigay sa mga hacker ng halos walang katapusang bilang ng mga IP address upang magpalaganap ng pag-atake ng DDoS.

Upang tingnan kung gumagana ang XML-RPC sa iyong site, maaari mo itong patakbuhin gamit ang isang tool na tinatawag na XML-RPC Validator. Patakbuhin ang iyong site gamit ang tool at kung magkakaroon ka ng error, nangangahulugan ito na wala kang suporta sa XML-RPC.

Kung nakatanggap ka ng mensahe ng tagumpay, maaari mong ihinto ang xmlrpc.php gamit ang isa sa dalawang diskarte sa ibaba.

Paraan 1: Huwag paganahin ang Xmlrpc.php gamit ang isang plugin

Ang hindi pagpapagana ng XML-RPC sa iyong WordPress site ay napakadali.

Pumunta sa seksyon Mga Plugin › Magdagdag ng bago sa iyong WordPress admin console. Maghanap ng isang plugin Huwag paganahin ang XML-RPC at i-install ito, mukhang ang larawan sa ibaba:

I-activate ang plugin at tapos ka na. Awtomatikong ilalagay ng plugin na ito ang kinakailangang code upang hindi paganahin ang XML-RPC.

Gayunpaman, tandaan na ang mga naka-install na plugin ay maaaring gumamit ng mga bahagi ng XML-RPC, at pagkatapos ay ang pag-disable nito ay maaaring magdulot ng salungatan sa pagitan ng mga plugin o ng kanilang mga indibidwal na bahagi at alisin ang mga ito sa working mode.

Kung gusto mo lang i-disable ang mga indibidwal na elemento ng XML-RPC ngunit payagan ang ibang mga plugin at feature na gumana, pagkatapos ay tumingin sa mga plugin na tulad nito:

  • Itigil ang XML-RPC Attack. Ihihinto ng plugin na ito ang lahat ng pag-atake ng XML-RPC, ngunit papayagan nito ang mga plugin tulad ng Jetpack at iba pang mga automated na tool at plugin na magpatuloy sa paggana sa pamamagitan ng pagbibigay sa kanila ng access sa mga xmlrpc.php file.
  • Kontrolin ang XML-RPC Publishing. Nagbibigay-daan ito sa iyong mapanatili ang kontrol at mag-publish nang malayuan.

Paraan 2: Manu-manong huwag paganahin ang Xmlrpc.php

Kung hindi mo gustong gumamit ng plugin at mas gusto mong gawin ito nang manu-mano, sundin ang diskarteng ito. Ihihinto nito ang lahat ng papasok na xmlrpc.php na kahilingan bago ito maipasa sa WordPress.

Buksan ang .htaccess file. Maaaring kailanganin mong paganahin ang 'ipakita ang mga nakatagong file' sa iyong file manager o FTP client upang mahanap ang file na ito.

I-paste ang code na ito sa file .htaccess:

# I-block ang mga kahilingan sa xmlrpc.php ng ​​WordPress order deny,allow deny from all allow from 123.123.123.123

Pangwakas na Kaisipan

Sa pangkalahatan, ang XML-RPC ay isang solidong solusyon sa ilan sa mga problemang dumating sa malayuang pag-publish sa iyong WordPress site. Gayunpaman, sa parehong oras, lumitaw ang ilang mga butas sa seguridad na naging medyo mapanganib para sa ilang mga may-ari ng WordPress site.

Upang mapanatiling secure ang iyong site, inirerekumenda na ganap na huwag paganahin ang xmlrpc.php maliban kung kailangan mo ng ilan sa mga tampok na kinakailangan ng malayuang pag-publish at ang Jetpack plugin. Pagkatapos ay maaari kang gumamit ng mga workaround na plugin na nagbibigay-daan sa iyong gamitin ang mga feature na ito habang tinatapik ang mga butas sa seguridad.

Sa paglipas ng panahon, maaari naming asahan ang XML-RPC functionality na maisama sa isang bagong WordPress API na susuporta sa malayuang pag-access nang hindi isinasakripisyo ang seguridad.

Na-block mo ba ang access sa XML-RPC sa pamamagitan ng isang plugin o manu-mano? O mayroon bang anumang isyu sa seguridad dahil dati itong aktibo? Ibahagi ang iyong karanasan sa mga komento sa ibaba.