XML-RPC-ის შესავალი. პროგრამირების კონკურსები რა ჩანს სერვერის ჟურნალებში


მისი პოსტი ასევე აჩვენებს, თუ როგორ უნდა გავაკეთოთ ბრაუზერის ავტორიზაცია, როგორც ქვემოთ:
$request = xmlrpc_encode_request ("methodName" , array("methodParam" ));
$auth = base64_encode ($username . ":" . $password );
$header = (version_compare(phpversion(), "5.2.8"))
? array("კონტენტის ტიპი: ტექსტი/xml" , "ავტორიზაცია: ძირითადი $auth" )
: "შინაარსის ტიპი: ტექსტი/xml\r\nავტორიზაცია: ძირითადი$auth " ;//
$context = stream_context_create (მაივი("http" => მასივი(
"metod" => "POST" ,
"header" => $header ,
"content" => $მოთხოვნა
)));
$ვებსერვისი = "http://www.example.com/rpc";
$file = file_get_contents ($webservice, false, $context);
$response = xmlrpc_decode ($ფაილი);
if (xmlrpc_is_fault($response)) (
დაბრუნება "xmlrpc: $response [faultString] ($response [faultCode])" ;
) სხვა (
დაბრუნება $response ;
}
?>
1 - რედაქტორის შენიშვნა: ეს არის შესწორება "SandersWang dt php at gmail dot com"-დან

16 წლის წინ

ორობითი სტრიქონები (დადგენილია xmlrpc_set_type-ით) შედის a ...დაბლოკვა, როგორც თქვენ მოელით. მაგრამ ყოველი მე-80 სიმბოლოს შემდეგ, ეს ფუნქცია ჩასმავს XML ერთეულს " ", რომელიც არის Unicode-ის ახალი ხაზი, თითქოს იწვევს ხაზების შეფუთვას, რაც, რა თქმა უნდა, სულელურია.

თუმცა სულელურიც არ უნდა იყოს, ის რეალურ პრობლემებს უქმნის ზოგიერთ XML-RPC სერვერს, როგორიცაა http://jakarta.apache.org/xmlrpc/ (nee Helma). ამ ერთეულების ამოღება მსგავსი რამით

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

მუშაობს პრობლემის გარშემო.

11 წლის წინ

უნდა აღინიშნოს, რომ დაშიფვრა, როგორც ჩანს, არაფერს შიფრავს, უბრალოდ მიუთითეთ რა შედის XML სათაურში.

ჩვენ გვქონდა პრობლემები ორმაგი დაშიფრული UTF სტრიქონების მონაცემთა ბაზაში შენახვისას ამ ფუნქციის გამოყენებისას, მისი გაგზავნა apache xml-rpc servlet-ში და შენახვა mysql მონაცემთა ბაზაში. ეს მოგვარდა "escapeing"-ის დაყენებით მხოლოდ "markup"-ზე და "encoding"-ზე "UTF-8" (არ დაგავიწყდეთ დააყენოთ "utf-8" xmlrpc_decode-შიც).

როგორც ჩანს, UTF-8 დაშიფრული სტრიქონები იშლება მათი ბაიტებით, როგორც ერთეულების ნაცვლად მათი სიმბოლოების, როგორც ერთეულების.

9 წლის წინ

ოდესმე გიცდიათ გადასცეს მასივი, როგორიცაა შემდეგი xmlrpc-ით?
$var1=მასივი(7=>14,9=>18);

გამომავალი მასივი საკმაოდ განსხვავებულად გამოიყურება! ასე გამოიყურება:
$var2=მასივი(14,18);

ერთადერთი გამოსავალი, რაც მე ვიპოვე, არის ინდექსზე სივრცის დაყენება:
$var3=მასივი(" 7"=>14," 9"=>18);

ამ მეთოდის გამოყენებით თქვენ მიიღებთ სწორ შედეგს. ($var1)

16 წლის წინ

ეს ფუნქცია უნდა გამოიყენებოდეს XML-RPC კლიენტის მიერ XML-RPC მოთხოვნისთვის XML დატვირთვის შესაქმნელად;

$params = "system.methodSignature" ;
$method = "system.methodHelp" ;
$მოთხოვნა = xmlrpc_encode_request ($method, $params);
ექო ($მოთხოვნა);
?>

აწარმოებს;



system.methodHelp

სისტემა.მეთოდი ხელმოწერა



მეორე არგუმენტი ცნობს ცვლადის ტიპს და წარმოქმნის სწორ XML-RPC სტრუქტურას. იხილეთ xmlrpc_encode() დამატებითი ინფორმაციისთვის.

12 წლის წინ

მარტივი OO კლიენტი ფუნქციის გადატვირთვით:

php მეთოდი test_helloworld ითარგმნება xmlrpc მეთოდით test.helloworld.

კლასი RpcClient (

კერძო $_methods;
პირადი $_context;
პირადი $_url;

ფუნქცია __construct ($url, $user, $passwd) (
$auth = base64_encode(sprintf("%s:%s", $user,$passwd));
$this->_context = stream_context_create(მაივი(
"http" => მასივი(
"metod" => "POST",
"header" => "შინაარსის ტიპი: ტექსტი/xml\r\n".
"ავტორიზაცია: ძირითადი $auth" ,

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

$this->registerMethod("Test_HelloWorld");

ფუნქცია __call ($methodName, $params) (
თუ (გასაღების_მასივი_არსებობს($methodName,$this->_methods)) (
// 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);
დაბრუნება $resp;
) სხვა (
// appelle la fonction de l"objet
call_user_method_array ($methodName, $this,$params);
}
}

პირადი ფუნქცია registerMethod ($method) (
$this->_methods[$method] = true;
}

XML-RPC-ის შესავალი

ინტერნეტში ბევრი სხვადასხვა რესურსია, რომელიც მომხმარებლებს გარკვეულ ინფორმაციას აწვდის. ეს არ ნიშნავს ჩვეულებრივ სტატიკურ გვერდებს, არამედ, მაგალითად, მონაცემთა ბაზიდან ან არქივებიდან ამოღებულ მონაცემებს. ეს შეიძლება იყოს ფინანსური მონაცემების არქივი (გაცვლის კურსი, ფასიანი ქაღალდების კოტირების მონაცემები), ამინდის მონაცემები ან უფრო მოცულობითი ინფორმაცია - სიახლეები, სტატიები, შეტყობინებები ფორუმებიდან. ასეთი ინფორმაცია შეიძლება წარედგინოს გვერდის ვიზიტორს, მაგალითად, ფორმის საშუალებით, მოთხოვნის პასუხად, ან ყოველ ჯერზე მისი დინამიურად გენერირება. მაგრამ სირთულე ის არის, რომ ხშირად ასეთი ინფორმაცია სჭირდება არა იმდენად საბოლოო მომხმარებელს - ადამიანს, არამედ სხვა სისტემებსა და პროგრამებს, რომლებიც გამოიყენებენ ამ მონაცემებს მათი გამოთვლებისთვის ან სხვა საჭიროებისთვის.

რეალური მაგალითი: საბანკო ვებსაიტის გვერდი, რომელიც აჩვენებს ვალუტის კოტირებს. თუ თქვენ შედიხართ გვერდზე, როგორც ჩვეულებრივი მომხმარებელი, ბრაუზერის საშუალებით, ხედავთ ყველა გვერდის დიზაინს, ბანერებს, მენიუს და სხვა ინფორმაციას, რომელიც „აყალიბებს“ ძიების ნამდვილ მიზანს - ვალუტის ციტატებს. თუ თქვენ გჭირდებათ ამ ციტატების შეყვანა თქვენს ონლაინ მაღაზიაში, მაშინ სხვა არაფერია გასაკეთებელი, თუ არა ხელით შეარჩიოთ საჭირო მონაცემები და გადაიტანოთ ისინი თქვენს ვებსაიტზე ბუფერში. და ამის გაკეთება ყოველდღე მოგიწევთ. მართლა არ არის გამოსავალი?

თუ პრობლემას პირდაპირ გადაჭრით, მაშინ გამოსავალი მაშინვე ჩნდება: პროგრამა (სკრიპტი ვებსაიტზე), რომელსაც მონაცემები სჭირდება, იღებს გვერდს სერვერიდან, როგორც „რეგულარული მომხმარებელი“, აანალიზებს (აანალიზებს) მიღებულ html კოდს და ამოიღებს მისგან საჭირო ინფორმაცია. ეს შეიძლება გაკეთდეს ან ჩვეულებრივი რეგულარული გამონათქვამით, ან ნებისმიერი html პარსერის გამოყენებით. მიდგომის სირთულე მის არაეფექტურობაშია. პირველ რიგში, მონაცემთა მცირე ნაწილის მისაღებად (მონაცემები ვალუტაზე ფაქტიურად ათეული ან ორი სიმბოლოა), თქვენ უნდა მიიღოთ მთელი გვერდი, რომელიც მინიმუმ რამდენიმე ათეული კილობაიტია. მეორეც, გვერდის კოდის ნებისმიერი ცვლილებით, მაგალითად, დიზაინი შეიცვალა ან სხვა რამ, ჩვენი ანალიზების ალგორითმი ხელახლა უნდა გადაკეთდეს. და ამას დასჭირდება საკმაოდ დიდი რესურსი.

ამიტომ, დეველოპერებმა მიიღეს გადაწყვეტილება - აუცილებელია შემუშავდეს რაიმე სახის უნივერსალური მექანიზმი, რომელიც საშუალებას მისცემს გამჭვირვალე (პროტოკოლის და გადაცემის საშუალო დონეზე) და მონაცემთა მარტივ გაცვლას პროგრამებს შორის, რომლებიც შეიძლება განთავსდეს ნებისმიერ ადგილას, დაიწეროს ნებისმიერ ენაზე. და იმუშაოს ნებისმიერი ოპერაციული სისტემის ქვეშ, სისტემებში და ნებისმიერ აპარატურულ პლატფორმაზე. ასეთ მექანიზმს ახლა უწოდებენ ხმამაღალ ტერმინებს "ვებ სერვისები", "SOAP", "სერვისზე ორიენტირებული არქიტექტურა". მონაცემთა გაცვლისთვის გამოიყენება ღია და დროში გამოცდილი სტანდარტები - HTTP პროტოკოლი გამოიყენება შეტყობინებების გადასაცემად (თუმცა სხვა პროტოკოლების გამოყენება შესაძლებელია - მაგალითად SMTP). თავად მონაცემები (ჩვენს მაგალითში, გაცვლითი კურსები) გადაცემულია დაფასოებული კროს-პლატფორმის ფორმატში - XML ​​დოკუმენტების სახით. ამ მიზნით გამოიგონეს სპეციალური სტანდარტი - SOAP.

დიახ, ახლა ვებ სერვისები, SOAP და XML ყველას აინტერესებს, ისინი იწყებენ აქტიურ დანერგვას და მსხვილი კორპორაციები, როგორიცაა IBM და Microsoft, ავრცელებენ ახალ პროდუქტებს, რომლებიც შექმნილია ვებ სერვისების სრული დანერგვის დასახმარებლად.

მაგრამ! ჩვენი მაგალითისთვის გაცვლითი კურსით, რომელიც უნდა გადაეცეს ბანკის ვებსაიტიდან ონლაინ მაღაზიის ძრავას, ასეთი გამოსავალი ძალიან რთული იქნება. ყოველივე ამის შემდეგ, მხოლოდ SOAP სტანდარტის აღწერა იკავებს უცენზურო ათასნახევარ გვერდს და ეს ყველაფერი არ არის. პრაქტიკული გამოყენებისთვის, თქვენ ასევე მოგიწევთ ისწავლოთ როგორ იმუშაოთ მესამე მხარის ბიბლიოთეკებთან და გაფართოებებთან (მხოლოდ PHP 5.0-დან დაწყებული, ის მოიცავს ბიბლიოთეკას SOAP-თან მუშაობისთვის) და დაწეროთ ასობით და ათასობით სტრიქონი თქვენივე კოდით. და ეს ყველაფერი რამდენიმე ასოსა და რიცხვის მისაღებად აშკარად ძალიან შრომატევადი და ირაციონალურია.

აქედან გამომდინარე, არსებობს ინფორმაციის გაცვლის კიდევ ერთი, შეიძლება ითქვას, ალტერნატიული სტანდარტი - XML-RPC. იგი შეიქმნა Microsoft-ის მონაწილეობით UserLand Software Inc-ის მიერ და შექმნილია აპლიკაციებს შორის მონაცემთა ერთიანი გადაცემისთვის ინტერნეტით. მას შეუძლია შეცვალოს SOAP მარტივი სერვისების შექმნისას, სადაც არ არის საჭირო რეალური ვებ სერვისების ყველა „საწარმო“ შესაძლებლობები.

რას ნიშნავს აბრევიატურა XML-RPC? RPC ნიშნავს დისტანციური პროცედურის ზარს. ეს ნიშნავს, რომ აპლიკაციას (იქნება სკრიპტი სერვერზე თუ ჩვეულებრივი აპლიკაცია კლიენტის კომპიუტერზე) შეუძლია გამჭვირვალედ გამოიყენოს მეთოდი, რომელიც ფიზიკურად არის დანერგილი და შესრულებული სხვა კომპიუტერზე. XML აქ გამოიყენება უნივერსალური ფორმატის უზრუნველსაყოფად გადაცემული მონაცემების აღწერისთვის. როგორც ტრანსპორტი, HTTP პროტოკოლი გამოიყენება შეტყობინებების გადასაცემად, რაც საშუალებას გაძლევთ შეუფერხებლად გაცვალოთ მონაცემები ნებისმიერი ქსელური მოწყობილობის საშუალებით - მარშრუტიზატორები, ფაიერვოლლები, პროქსი სერვერები.

ასე რომ, გამოსაყენებლად უნდა გქონდეთ: XML-RPC სერვერი, რომელიც უზრუნველყოფს ერთ ან მეტ მეთოდს, XML-RPC კლიენტს, რომელსაც შეუძლია სწორი მოთხოვნის გენერირება და სერვერის პასუხის დამუშავება, ასევე იცის სერვერის პარამეტრები, რომლებიც აუცილებელია წარმატებული მუშაობისთვის - მისამართი, მეთოდის სახელი და გადაცემული პარამეტრები.

XML-RPC– სთან ყველა სამუშაო ხდება „მოთხოვნა–პასუხის“ რეჟიმში, ეს არის ერთ–ერთი განსხვავება ტექნოლოგიასა და SOAP სტანდარტს შორის, სადაც არის ტრანზაქციების კონცეფციები და დაგვიანებული ზარების განხორციელების შესაძლებლობა (როდესაც სერვერი ინახავს მოთხოვნას და უპასუხებს მას მომავალში გარკვეულ დროს). ეს დამატებითი ფუნქციები უფრო სასარგებლოა მძლავრი კორპორატიული სერვისებისთვის; ისინი მნიშვნელოვნად ართულებენ სერვერების განვითარებას და მხარდაჭერას და დამატებით მოთხოვნებს უყენებენ კლიენტის გადაწყვეტილებების დეველოპერებს.

XML-RPC–სთან მუშაობის პროცედურა იწყება მოთხოვნის ჩამოყალიბებით. ტიპიური მოთხოვნა ასე გამოიყურება:

POST /RPC2 HTTP/1.0
მომხმარებლის აგენტი: eshop-test/1.1.1 (FreeBSD)
მასპინძელი: server.localnet.com
შინაარსი-ტიპი: ტექსტი/xml
შინაარსი-სიგრძე: 172



Ტესტირების მეთოდი
გამარჯობა XML-RPC!


პირველი ხაზები ქმნის სტანდარტულ HTTP POST მოთხოვნის სათაურს. საჭირო პარამეტრებში შედის ჰოსტი, მონაცემთა ტიპი (MIME ტიპი), რომელიც უნდა იყოს ტექსტი/xml და შეტყობინების სიგრძე. სტანდარტი ასევე განსაზღვრავს, რომ მომხმარებლის აგენტის ველი უნდა იყოს შევსებული, მაგრამ შეიძლება შეიცავდეს თვითნებურ მნიშვნელობას.

შემდეგ მოდის XML დოკუმენტის ჩვეულებრივი სათაური. მოთხოვნის ძირეული ელემენტია , შეიძლება იყოს მხოლოდ ერთი და არ შეიძლება შეიცავდეს ისეთ კვანძებს, როგორიცაა ბავშვები. ეს ნიშნავს, რომ ერთ მოთხოვნას შეუძლია მხოლოდ ერთი მეთოდის გამოძახება სერვერზე.

ხაზი Ტესტირების მეთოდიმიუთითებს, რომ ჩვენ ვუწოდებთ მეთოდს სახელად TestMetod. საჭიროების შემთხვევაში, აქ შეგიძლიათ მიუთითოთ მეთოდის შემცველი პროგრამის ან მოდულის სახელი, ასევე მისკენ მიმავალი გზა. XML-RPC სპეციფიკაცია, მიუხედავად იმისა, რომ აწესებს გარკვეულ შეზღუდვებს სიმბოლოების სიმრავლეზე, რომლებიც შეიძლება გამოყენებულ იქნას მეთოდის აღსანიშნავად, მათი ინტერპრეტაცია მთლიანად დამოკიდებულია სერვერის განხორციელებაზე.

შემდეგი, გადაცემული პარამეტრები დაყენებულია. ეს განყოფილება გამოიყენება ამისთვის. რომელიც შეიძლება შეიცავდეს ქვეელემენტების თვითნებურ რაოდენობას რომლებიც შეიცავს ტეგის მიერ აღწერილ პარამეტრს . ჩვენ შევხედავთ პარამეტრებს და მონაცემთა ტიპებს ცოტა შემდგომ. ჩვენს ვერსიაში, მეთოდს გადაეცემა ტეგში ჩასმული სტრიქონის ერთი პარამეტრი .

ყველა პარამეტრის აღწერას მოჰყვება თეგების დახურვა. მოთხოვნა და პასუხი XML-RPC-ში არის ჩვეულებრივი XML დოკუმენტი, ამიტომ ყველა ტეგი უნდა დაიხუროს. მაგრამ XML-RPC-ში არ არსებობს ერთი ტეგები, თუმცა ისინი წარმოდგენილია XML სტანდარტში.

ახლა მოდით შევხედოთ სერვერის პასუხს. HTTP პასუხის სათაური ნორმალურია; თუ მოთხოვნა წარმატებით დამუშავდა, სერვერი აბრუნებს HTTP/1.1 200 OK პასუხს. ისევე, როგორც მოთხოვნაში, თქვენ სწორად უნდა მიუთითოთ MIME ტიპი, შეტყობინების სიგრძე და პასუხის წარმოქმნის თარიღი.

თავად რეაგირების ორგანო ასეთია:



მართალია


ახლა ნაცვლად root tag ტეგი მითითებულია , რომელიც დაუყოვნებლივ შეიცავს მოთხოვნის დამუშავების შედეგებს. სამწუხაროდ, პასუხი არ გადის მეთოდის სახელს, ასე რომ თქვენ უნდა შეინახოთ იგი კლიენტის მხარეს, რათა თავიდან აიცილოთ დაბნეულობა, თუ სხვადასხვა მეთოდებს ერთდროულად გამოიძახებთ.

თუ თქვენი მოთხოვნის დამუშავებისას მოხდა შეცდომა, ნაცვლად პასუხი შეიცავს ელემენტს , რომელშიც ჩადებული იქნება შეცდომის აღწერის სტრუქტურა. შეცდომის აღწერა შეიცავს ციფრული შეცდომის კოდს და ტექსტის აღწერას.

ახლა მოდით მოკლედ გადავხედოთ მონაცემთა ტიპებს XML-RPC-ში. სულ არის 9 მონაცემთა ტიპი - შვიდი მარტივი ტიპი და 2 რთული. თითოეული ტიპი აღწერილია საკუთარი ტეგით ან ტეგების ნაკრებით (კომპლექსური ტიპებისთვის).

მარტივი ტიპები:

Მთელი რიცხვები- ტეგი ან ;

ლოგიკური ტიპი- ტეგი , შეუძლია მიიღოს ორივე მნიშვნელობა 0/1 და true/false;

ASCII სტრიქონი- აღწერილია ტეგით და შეიძლება შეიცავდეს სიმბოლოების თვითნებურ სტრიქონს;

მცურავი წერტილის რიცხვები- ტეგი , ასევე შეიძლება შეიცავდეს რიცხვის ნიშანს, წილადი ნაწილი გამოყოფილია წერტილით;

თარიღი და დრო- აღწერილია ტეგით და უნდა შეესაბამებოდეს iso8601 ფორმატს. სკრიპტებში შემდგომი დამუშავებისთვის ეს ფორმატი ცოტა მოუხერხებელია, ამიტომ ის ყოველთვის გარდაიქმნება მოთხოვნის გაგზავნისას/მიღებისას. ეს შეიძლება გაკეთდეს სპეციალური ფუნქციით ბიბლიოთეკაში, ან, თუ არ არსებობს, დეველოპერმა უნდა გადაიყვანოს თარიღი ხელით.

ბოლო მარტივი ტიპია base64 კოდირებული სტრიქონი, რომელიც აღწერილია ტეგით . ეს ტიპი უნივერსალურია; მისი გამოყენება შესაძლებელია კლიენტსა და სერვერს შორის ნებისმიერი მონაცემების გადასაცემად, თუმცა გადაცემული მონაცემების მოცულობა იზრდება ასეთი კოდირების გამო. მაგრამ ეს არის პროტოკოლის ტექსტური ხასიათისა და კონკრეტულად XML ფორმატის შედეგი.

რთული ტიპები წარმოდგენილია სტრუქტურებითა და მასივებით. სტრუქტურა განისაზღვრება ფესვის ელემენტით , რომელიც შეიძლება შეიცავდეს ელემენტების თვითნებურ რაოდენობას სტრუქტურის თითოეული წევრის განსაზღვრა. სტრუქტურის წევრი აღწერილია ორი ტეგით: პირველი, , აღწერს წევრის სახელს, მეორე, , შეიცავს წევრის მნიშვნელობას (მონაცემთა ტიპის აღწერის ტეგთან ერთად).

მასივებს სახელები არ აქვთ და აღწერილია ტეგით რომელიც შეიცავს ერთ ელემენტს და ერთი ან მეტი ბავშვის ელემენტი , სადაც მითითებულია კონკრეტული მონაცემები. მასივი შეიძლება შეიცავდეს სხვა ტიპებს ნებისმიერი თანმიმდევრობით, ისევე როგორც სხვა მასივები, რაც საშუალებას გაძლევთ აღწეროთ მრავალგანზომილებიანი მასივები. თქვენ ასევე შეგიძლიათ აღწეროთ სტრუქტურების მასივი. მაგრამ ის ფაქტი, რომ მასივს არ აქვს სახელი, ართულებს მის გამოყენებას ზოგიერთ შემთხვევაში; რთული მონაცემების გადასატანად, ისინი განმეორებით უნდა იყოს შეფუთული სხვა ტიპებში (მაგალითად, რამდენიმე მასივის გადასატანად, შეგიძლიათ თითოეული მასივი ცალკე შეფუთოთ სტრუქტურაში. და შემდეგ შექმენით ერთი მასივი ამ სტრუქტურებიდან).

რა თქმა უნდა, ვინმე იტყვის, რომ მონაცემთა ტიპების ასეთი სია ძალიან ცუდია და „არ გაძლევს გაფართოების საშუალებას“. დიახ, თუ რთული ობიექტების ან დიდი რაოდენობით მონაცემების გადაცემა გჭირდებათ, მაშინ უმჯობესია გამოიყენოთ SOAP. და მცირე, არამოთხოვნილი აპლიკაციებისთვის, XML-RPC საკმაოდ შესაფერისია; უფრო მეტიც, ძალიან ხშირად მისი შესაძლებლობებიც კი ძალიან ბევრი აღმოჩნდება! განლაგების სიმარტივის გათვალისწინებით, ბიბლიოთეკების ძალიან დიდი რაოდენობა თითქმის ნებისმიერი ენისა და პლატფორმისთვის და ფართო მხარდაჭერა PHP-ში, მაშინ XML-RPC-ს ხშირად უბრალოდ კონკურენტები არ ჰყავს. მიუხედავად იმისა, რომ მისი დაუყონებლივ რეკომენდაცია შეუძლებელია, როგორც უნივერსალური გადაწყვეტა - თითოეულ კონკრეტულ შემთხვევაში ეს უნდა გადაწყდეს გარემოებების მიხედვით.

XML-RPC ტექნოლოგია გამოიყენება WordPress სისტემაში სხვადასხვა სასიამოვნო ფუნქციებისთვის, როგორიცაა pingbacks, trackbacks, საიტის დისტანციური მართვა ადმინისტრაციულ პანელში შესვლის გარეშე და ა.შ. სამწუხაროდ, თავდამსხმელებს შეუძლიათ გამოიყენონ ის ვებსაიტებზე DDoS შეტევების განსახორციელებლად. ანუ თქვენ ქმნით ლამაზ, საინტერესო WP პროექტებს თქვენთვის ან შეკვეთით და ამავდროულად, არაფერში ეჭვის გარეშე, შეგიძლიათ იყოთ DDoS ბოტნეტის ნაწილი. ათობით და ასობით ათასი საიტის ერთმანეთთან შეერთებით, ცუდი ადამიანები ქმნიან ძლიერ თავდასხმას მსხვერპლზე. თუმცა ამავდროულად თქვენი საიტიც განიცდის, რადგან... დატვირთვა მიდის ჰოსტინგზე, სადაც ის მდებარეობს.

ასეთი ცუდი აქტივობის მტკიცებულება შეიძლება იყოს სერვერის ჟურნალებში (access.log in nginx), რომელიც შეიცავს შემდეგ ხაზებს:

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

მაგრამ მოდით დავუბრუნდეთ XML-RPC დაუცველობას. ვიზუალურად, ეს გამოიხატება თქვენს სერვერზე საიტების ნელი გახსნით ან მათი საერთოდ ჩატვირთვის შეუძლებლობაში (502 Bad Gateway შეცდომა). ჩემი FASTVPS მასპინძლის ტექნიკურმა მხარდაჭერამ დაადასტურა ჩემი ვარაუდები და ურჩია:

  1. განაახლეთ WordPress უახლეს ვერსიაზე დანამატებთან ერთად. ზოგადად, თუ მიჰყვებით, შესაძლოა წაიკითხოთ უახლესი 4.2.3-ის დაყენების აუცილებლობის შესახებ. უსაფრთხოების კრიტიკის გამო (ისევე როგორც წინა ვერსიები). მოკლედ, კარგია განახლება.
  1. დააინსტალირეთ Disable XML-RPC Pingback მოდული.

XML-RPC-ის გამორთვა WordPress-ში

ადრე მეჩვენება, რომ XML-RPC-ის ჩართვა/გამორთვა იყო სადღაც სისტემის პარამეტრებში, მაგრამ ახლა იქ ვერ ვპოულობ. ამიტომ, მისგან თავის დაღწევის უმარტივესი გზაა შესაბამისი მოდულის გამოყენება.

იპოვეთ და ჩამოტვირთეთ გამორთეთ XML-RPC Pingback ან დააინსტალირეთ იგი პირდაპირ სისტემის ადმინისტრატორის პანელიდან. თქვენ არ გჭირდებათ რაიმე დამატებითი კონფიგურაცია, მოდული დაუყოვნებლივ იწყებს მუშაობას. ის შლის pingback.ping და pingback.extensions.getPingbacks მეთოდებს XML-RPC ინტერფეისიდან. გარდა ამისა, ის შლის X-Pingback-ს HTTP სათაურებიდან.

ერთ-ერთ ბლოგში აღმოვაჩინე კიდევ რამდენიმე ვარიანტი XML-RPC გამორთვის მოსაშორებლად.

1. გამორთეთ XML-RPC შაბლონში.

ამისათვის დაამატეთ შემდეგი ხაზი თემის functions.php ფაილს:

შეუკვეთეთ უარყოფა, ნება დართეთ ყველასგან

მე პირადად ბოლო ორი მეთოდი არ გამომიყენებია, რადგან... დავაკავშირე Disable XML-RPC Pingback დანამატი - ვფიქრობ საკმარისი იქნება. მხოლოდ მათთვის, ვისაც არ მოსწონს ზედმეტი ინსტალაციები, მე შევთავაზე ალტერნატიული ვარიანტები.

შაბათს შუადღიდან დაწყებული, ჩემს სერვერზე, სადაც დაახლოებით 25 Wordpress საიტია განთავსებული, დაიწყო მძიმე შენელება. მას შემდეგ, რაც მე მოვახერხე წინა შეტევების ( , ) გადარჩენა შეუმჩნევლად, მაშინვე ვერ გავიგე რა ხდებოდა.

როცა გავარკვიე, აღმოჩნდა, რომ პაროლები უხეში იყო + ბევრი მოთხოვნა XMLRPC-სთვის.

შედეგად, ჩვენ მოვახერხეთ ყველაფრის შეწყვეტა, თუმცა არა დაუყოვნებლივ. აქ არის სამი მარტივი ხრიკი, თუ როგორ ავიცილოთ ეს.

ეს ტექნიკა, დიდი ალბათობით, ყველასთვის ცნობილია, მაგრამ მე გადავდგი რამდენიმე შეცდომა, რომლებიც ვერ ვიპოვე აღწერილობებში - შესაძლოა ამან დაზოგოს ვინმეს დრო.

1. შეაჩერეთ ძებნა, დააინსტალირეთ Limit Login Attempts მოდული - დააინსტალირეთ, რადგან სხვა დაცვა მნიშვნელოვნად ანელებს სერვერს, მაგალითად, Login Security Solution მოდულის გამოყენებისას, სერვერი გარდაიცვალა ნახევარი საათის შემდეგ, დანამატი ძლიერ იტვირთება მონაცემთა ბაზაში. .

პარამეტრებში აუცილებლად ჩართეთ ჩამრთველი „პროქსისთვის“ - წინააღმდეგ შემთხვევაში ის განსაზღვრავს თქვენი სერვერის IP-ს ყველასთვის და ავტომატურად დაბლოკავს ყველას.
განაახლეთ, გმადლობთ, დეტალები ქვემოთ მოცემულია კომენტარებში - ჩართეთ ჩამრთველი „პროქსისთვის“ მხოლოდ იმ შემთხვევაში, თუ განმარტება არ მუშაობს, როდესაც ჩართულია „პირდაპირი კავშირი“

2. გამორთეთ XML-RPC - გამორთეთ XML-RPC მოდული (გააქტიურება მარტივია და ეს არის).

3. დახურეთ wp-login.php - თუ თქვენ შედიხართ საიტზე IP-ით, დანამატი არ მუშაობს და პიკერები აგრძელებენ საიტის ავარიას. ამის თავიდან ასაცილებლად, დაამატეთ .htaccess:

შეუკვეთეთ უარყოფა, ნება დართეთ ყველასგან

ჩვენ ვაკოპირებთ wp-login ფაილს, ვუწოდებთ მას რაიმე უცნაურ სახელს, მაგალითად poletnormalny.php და ფაილის შიგნით ვიყენებთ ავტოკორექტირებას, რათა შევცვალოთ ყველა wp-login.php წარწერა poletnormalny.php.
ეს არის ის, ახლა თქვენ შეგიძლიათ წვდომა ადმინისტრაციულ პანელზე მხოლოდ თქვენი ფაილის გამოყენებით.

ამ 3 მარტივი ნაბიჯის შემდეგ, საიტებმა კვლავ დაიწყეს ფრენა და მშვიდობა დადგა.

ისე, უცებ საინტერესოა

ერთ-ერთი ვარიანტია ნახოთ, თავს დაესხნენ თუ არა. ეს ჩანს nginx ჟურნალებში (მაგალითად, აქ არის გზა Debian /var/log/nginx access.log ფაილისთვის).

WordPress-ს ყოველთვის ჰქონდა ჩაშენებული ინსტრუმენტი თქვენს საიტზე დისტანციური წვდომისთვის. მართლაც, ზოგჯერ გჭირდებათ თქვენს საიტზე მოხვედრა, მაგრამ თქვენი კომპიუტერი შორს არის თქვენგან. დიდი ხნის განმავლობაში გამოსავალი იყო ფაილი, სახელწოდებით xmlrpc.php. თუმცა, ბოლო წლებში ეს ფაილი უფრო პრობლემად იქცა, ვიდრე გამოსავალად.

ქვემოთ უფრო დეტალურად განვიხილავთ xmlrpc.php-ს და რატომ შეიქმნა იგი. ჩვენ ასევე განვიხილავთ უსაფრთხოების გავრცელებულ პრობლემებს, რაც შეიძლება გამოიწვიოს და როგორ მოვაგვაროთ ისინი თქვენი WordPress საიტისთვის.

XML-RPC არის WordPress ფუნქცია, რომელიც საშუალებას აძლევს მონაცემთა გადაცემას, HTTP ემსახურება როგორც ტრანსპორტი, ხოლო XML კოდირებისთვის. იმის გამო, რომ WordPress არ არის დახურული სისტემა და ხშირად ურთიერთობს სხვა სისტემებთან, იპოვეს გადაწყვეტილებები ამ პრობლემის მოსაგვარებლად.

მაგალითად, ვთქვათ, რომ გსურთ განათავსოთ თქვენს ვებსაიტზე თქვენი მობილური ტელეფონიდან. თქვენ უნდა გამოიყენოთ xmlrpc.php-ის მიერ მოწოდებული დისტანციური წვდომა.

xmlrpc.php-ის მთავარი ფუნქციონირება არის სმარტფონიდან საიტთან დაკავშირების შესაძლებლობა, სხვა საიტებიდან ტრეკბეკების და ლინკბეკების განხორციელება და Jetpack დანამატთან დაკავშირებული ზოგიერთი ფუნქცია.

რატომ შეიქმნა Xmlrpc.php და როგორ გამოიყენებოდა იგი?

XML-RPC-ის დანერგვა ბრუნდება WordPress-ის ადრეულ დღეებში და მანამდეც კი, სანამ WordPress გახდებოდა WordPress.

ინტერნეტის ადრეულ დღეებში კავშირები ძალიან ნელი იყო და ინტერნეტში ჩაწერისა და გამოქვეყნების პროცესი გაცილებით რთული და შრომატევადი იყო. ცვლილებების პირდაპირ ბრაუზერის მეშვეობით განხორციელების ნაცვლად, უმეტესობამ ისინი გახადა ხაზგარეშე და შემდეგ დააკოპირა და ჩასვა მათი შინაარსი ონლაინში. და ეს პროცესი შორს იყო იდეალურისგან.

გამოსავალი (იმ დროს) იყო ბლოგინგის ოფლაინ კლიენტის შექმნა, სადაც შეგეძლოთ თქვენი შინაარსის შედგენა, შემდეგ დაკავშირება თქვენს ბლოგთან და გამოქვეყნება. ეს კავშირი განხორციელდა XML-RPC-ის საშუალებით. ძირითადი XML-RPC ფუნქციონირებით, ამ კავშირების გამოყენებით ადრეულმა აპლიკაციებმა ხალხს საშუალება მისცა წვდომა თავიანთ WordPress საიტებზე სხვა მოწყობილობებიდან.

XML-RPC დღეს

2008 წელს, WordPress-ის 2.6 ვერსიით, დაინერგა ვარიანტი XML-RPC-ის ჩართვის ან გამორთვისთვის. თუმცა, WordPress iPhone აპლიკაციის გამოშვებით, XML-RPC მხარდაჭერა ჩართული იყო ნაგულისხმევად და არ არსებობდა მისი გამორთვის ვარიანტი. ასე რჩება დღესაც.

რა თქმა უნდა, ამ ფაილის მიერ მოწოდებული ფუნქციონალობა დროთა განმავლობაში საგრძნობლად შემცირდა და ფაილის ზომა 83კბ-დან 3კბ-მდე შემცირდა, ის აღარ თამაშობს ისეთ როლს, როგორც ადრე.

XML-RPC თვისებები

ახალი WordPress აპლიკაციის პროგრამირების ინტერფეისით (API), შეიძლება ველოდოთ, რომ XML-RPC მთლიანად გამორთული იქნება. დღეს ეს ახალი API ჯერ კიდევ ტესტირების პროცესშია და მისი ჩართვა შესაძლებელია მხოლოდ სპეციალური მოდულის საშუალებით.

მიუხედავად იმისა, რომ მომავალში შეგიძლიათ ველოდოთ API პირდაპირ WordPress-ის ბირთვში ჩართვისას, რაც მთლიანად გამორიცხავს xmlrpc.php-ის საჭიროებას.

ახალი API არ არის სრულყოფილი, მაგრამ ის უზრუნველყოფს კარგ, საიმედო უსაფრთხოებას, განსხვავებით xmlrpc.php.

რატომ გამორთოთ Xmlrpc.php

XML-RPC-ის ყველაზე დიდი პრობლემა უსაფრთხოებაა. პრობლემა პირდაპირ არ არის დაკავშირებული XML-RPC-თან, მაგრამ ის შეიძლება გამოყენებულ იქნას თქვენს საიტზე თავდასხმის გასააქტიურებლად.

რა თქმა უნდა, შეგიძლიათ დაიცვათ თავი ძალიან ძლიერი პაროლით და WordPress უსაფრთხოების დანამატებით. მაგრამ საუკეთესო დაცვის რეჟიმი მისი უბრალოდ გამორთვაა.

XML-RPC-ის ორი ძირითადი სისუსტეა, რომლებიც წარსულში იქნა გამოყენებული.

პირველი იყენებს უხეში ძალის შეტევებს თქვენს საიტზე წვდომის მოსაპოვებლად. თავდამსხმელი შეეცდება მოიპოვოს წვდომა თქვენს საიტზე xmlrpc.php-ის გამოყენებით მომხმარებლის სახელებისა და პაროლების სხვადასხვა კომბინაციით. მათ შეუძლიათ ეფექტურად გამოიყენონ ერთი ბრძანება ასობით სხვადასხვა პაროლის შესამოწმებლად. ეს საშუალებას აძლევს მათ გვერდის ავლით უსაფრთხოების ინსტრუმენტები, რომლებიც ჩვეულებრივ აღმოაჩენენ და დაბლოკავს უხეში ძალის შეტევებს.

მეორე არის საიტის ხაზგარეშე გადატანა DDoS შეტევის საშუალებით. ჰაკერები გამოიყენებენ საპირისპირო შეტყობინებას WordPress-ში, რათა ის ერთდროულად ათასობით საიტზე გაგზავნონ. ეს xmlrpc.php ფუნქცია ჰაკერებს აძლევს IP მისამართების თითქმის უსასრულო რაოდენობას DDoS შეტევის გასავრცელებლად.

იმის შესამოწმებლად, მუშაობს თუ არა XML-RPC თქვენს საიტზე, შეგიძლიათ გაუშვათ ის ინსტრუმენტის გამოყენებით, სახელწოდებით XML-RPC Validator. გაუშვით თქვენი საიტი ხელსაწყოთი და თუ შეცდომას მიიღებთ, ეს ნიშნავს, რომ არ გაქვთ XML-RPC მხარდაჭერა.

თუ მიიღებთ წარმატებულ შეტყობინებას, შეგიძლიათ შეაჩეროთ xmlrpc.php ქვემოთ მოცემული ორი მიდგომიდან ერთის გამოყენებით.

მეთოდი 1: გამორთეთ Xmlrpc.php მოდულის გამოყენებით

თქვენს WordPress საიტზე XML-RPC-ის გამორთვა წარმოუდგენლად მარტივია.

გადადით განყოფილებაში დანამატები › ახალის დამატებათქვენს WordPress ადმინისტრაციულ კონსოლში. მოძებნეთ მოდული გამორთეთ XML-RPCდა დააინსტალირეთ, ასე გამოიყურება ქვემოთ მოცემულ სურათზე:

გაააქტიურეთ დანამატი და დაასრულეთ. ეს მოდული ავტომატურად ჩასვამს საჭირო კოდს XML-RPC-ის გამორთვისთვის.

თუმცა, გახსოვდეთ, რომ დაინსტალირებული დანამატები შეიძლება გამოიყენონ XML-RPC-ის ნაწილები, შემდეგ კი მისი გამორთვამ შეიძლება გამოიწვიოს კონფლიქტი დანამატებს ან მათ ცალკეულ ნაწილებს შორის და გამოიყვანოს ისინი სამუშაო რეჟიმიდან.

თუ გსურთ მხოლოდ ცალკეული XML-RPC ელემენტების გამორთვა, მაგრამ დაუშვათ სხვა დანამატები და ფუნქციები იმუშაონ, მაშინ გადახედეთ ასეთ დანამატებს:

  • შეაჩერე XML-RPC თავდასხმა. ეს დანამატი შეაჩერებს ყველა XML-RPC შეტევას, მაგრამ ის საშუალებას მისცემს დანამატებს, როგორიცაა Jetpack და სხვა ავტომატიზირებული ხელსაწყოები და დანამატები, გააგრძელონ მუშაობა xmlrpc.php ფაილებზე წვდომის მიცემით.
  • კონტროლი XML-RPC Publishing. ეს საშუალებას გაძლევთ შეინარჩუნოთ კონტროლი და გამოაქვეყნოთ დისტანციურად.

მეთოდი 2: ხელით გამორთეთ Xmlrpc.php

თუ არ გსურთ მოდულის გამოყენება და გირჩევნიათ ამის გაკეთება ხელით, მიჰყევით ამ მიდგომას. ის შეაჩერებს ყველა შემომავალ xmlrpc.php მოთხოვნას WordPress-ზე გადაცემამდე.

გახსენით .htaccess ფაილი. ამ ფაილის საპოვნელად შეიძლება დაგჭირდეთ „ფარული ფაილების ჩვენება“ თქვენს ფაილ მენეჯერში ან FTP კლიენტში.

ჩასვით ეს კოდი ფაილში .htaccess:

# WordPress xmlrpc.php მოთხოვნების დაბლოკვა შეკვეთა უარყოფა, ნება დართოს უარი ყველა დაშვებისგან 123.123.123.123-დან

საბოლოო აზრები

საერთო ჯამში, XML-RPC იყო მყარი გადაწყვეტა ზოგიერთი პრობლემისთვის, რომელიც მოჰყვა თქვენს WordPress საიტზე დისტანციურ გამოქვეყნებას. თუმცა, ამავდროულად, გაჩნდა უსაფრთხოების გარკვეული ხვრელები, რომლებიც საკმაოდ საშიში აღმოჩნდა WordPress საიტის ზოგიერთი მფლობელისთვის.

თქვენი საიტის უსაფრთხოების შესანარჩუნებლად, რეკომენდირებულია მთლიანად გამორთოთ xmlrpc.php, თუ არ დაგჭირდებათ დისტანციური გამოქვეყნების და Jetpack მოდულისთვის საჭირო ზოგიერთი ფუნქცია. შემდეგ შეგიძლიათ გამოიყენოთ გამოსავალი დანამატები, რომლებიც საშუალებას მოგცემთ გამოიყენოთ ეს ფუნქციები უსაფრთხოების ხვრელების შესწორებისას.

დროთა განმავლობაში, ჩვენ შეგვიძლია ველოდოთ XML-RPC ფუნქციონირების ინტეგრირებას ახალ WordPress API-ში, რომელიც მხარს დაუჭერს დისტანციურ წვდომას უსაფრთხოების შეწირვის გარეშე.

დაბლოკეთ წვდომა XML-RPC-ზე მოდულის საშუალებით ან ხელით? ან იყო რაიმე უსაფრთხოების პრობლემა, რადგან ის ადრე აქტიური იყო? გაუზიარეთ თქვენი გამოცდილება ქვემოთ მოცემულ კომენტარებში.