एक्सएमएल-आरपीसी का परिचय. प्रोग्रामिंग प्रतियोगिताएं सर्वर लॉग में क्या दिखाई देता है


उनकी पोस्ट यह भी बताती है कि ब्राउज़र प्रमाणीकरण कैसे करें, जैसा कि नीचे दिया गया है:
$request = xmlrpc_encode_request ("methodName" , array("methodParam" ));
$auth = बेस64_एनकोड ($उपयोगकर्ता नाम . ":" . $पासवर्ड );
$हेडर = (संस्करण_तुलना(phpversion(), "5.2.8"))
? सरणी ("सामग्री-प्रकार: टेक्स्ट/एक्सएमएल", "प्राधिकरण: मूल $auth")
: "सामग्री-प्रकार: text/xml\r\nप्राधिकरण: बुनियादी$auth " ; //
$संदर्भ = स्ट्रीम_कॉन्टेक्स्ट_क्रिएट (सरणी('http' => सरणी(
"विधि" => "पोस्ट" ,
"हेडर" => $हेडर,
"सामग्री" => $अनुरोध
)));
$वेबसेवा= "http://www.example.com/rpc";
$फ़ाइल = फ़ाइल_get_contents($वेबसेवा, ग़लत, $संदर्भ);
$प्रतिक्रिया = xmlrpc_decode ($फ़ाइल);
यदि (xmlrpc_is_fault($प्रतिक्रिया)) (
वापसी "xmlrpc: $प्रतिक्रिया [फ़ॉल्टस्ट्रिंग] ($प्रतिक्रिया [फ़ॉल्टकोड] )" ;
) अन्य (
वापसी $प्रतिक्रिया ;
}
?>
1 - संपादक नोट: यह "सैंडर्सवांग डीटी पीएचपी एट जीमेल डॉट कॉम" से एक सुधार है।

16 साल पहले

बाइनरी स्ट्रिंग्स (xmlrpc_set_type के साथ सेट) एक में जाती हैं ...जैसा आप उम्मीद करते हैं वैसा ब्लॉक करें। लेकिन प्रत्येक 80वें अक्षर के बाद, यह फ़ंक्शन XML इकाई " " सम्मिलित करता है, जो एक यूनिकोड न्यूलाइन है, जैसे कि एक लाइन-रैप का कारण बनता है, जो कि मूर्खतापूर्ण है।

हालाँकि यह मूर्खतापूर्ण हो सकता है, यह कुछ XML-RPC सर्वरों, जैसे http://jakarta.apache.org/xmlrpc/ (नी हेल्मा) के लिए वास्तविक समस्याएँ पैदा करता है। कुछ इस तरह से उन संस्थाओं को अलग करना

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

समस्या के आसपास काम करता है.

11 साल पहले

यह ध्यान दिया जाना चाहिए कि एन्कोडिंग कुछ भी एन्कोड नहीं करती है, बस निर्दिष्ट करें कि XML हेडर में क्या जाता है।

इस फ़ंक्शन का उपयोग करते समय हमें डबल-एन्कोडेड यूटीएफ स्ट्रिंग्स को डेटाबेस में सहेजने, इसे अपाचे xml-आरपीसी सर्वलेट पर भेजने और इसे MySQL डेटाबेस में संग्रहीत करने में समस्याएं थीं। इसे "एस्केपिंग" को केवल "मार्कअप" और "एन्कोडिंग" को "UTF-8" पर सेट करके हल किया गया था (xmlrpc_decode में "utf-8" को भी सेट करना न भूलें)।

ऐसा लगता है कि UTF-8 एन्कोडेड स्ट्रिंग्स अपने बाइट्स के साथ एंटाइट्स के रूप में अपने वर्णों के बजाय इकाइयों के रूप में बच जाती हैं।

9 साल पहले

क्या आपने कभी xmlrpc के साथ निम्नलिखित की तरह किसी सरणी को ट्रांसमिट करने का प्रयास किया है?
$var1=सरणी(7=>14,9=>18);

आउटपुट ऐरे काफी अलग दिखता है! यह इस तरह दिखेगा:
$var2=सरणी(14,18);

मुझे जो एकमात्र समाधान मिला वह है सूचकांक में एक स्थान जोड़ना:
$var3=array(" 7"=>14," 9"=>18);

उस विधि का उपयोग करके आपको सही परिणाम मिलेगा। ($var1)

16 साल पहले

XML-RPC अनुरोध के लिए XML पेलोड बनाने के लिए XML-RPC क्लाइंट द्वारा इस फ़ंक्शन का उपयोग किया जाना चाहिए;

$params = "system.methodSignature" ;
$method = "system.methodHelp" ;
$अनुरोध = xmlrpc_encode_request ($विधि, $params);
प्रतिध्वनि ($अनुरोध);
?>

पैदा करता है;



system.methodHelp

system.methodSignature



दूसरा तर्क चर के प्रकार को पहचानता है और सही XML-RPC संरचना उत्पन्न करता है। अधिक विवरण के लिए xmlrpc_encode() देखें।

12 वर्ष पहले

फ़ंक्शन ओवरलोड के साथ सरल OO क्लाइंट:

php विधि test_helloworld को xmlrpc विधि test.helloworld में अनुवादित किया गया है।

क्लास RpcClient(

निजी $_विधियाँ;
निजी $_संदर्भ;
निजी $_url;

फ़ंक्शन __construct ($url, $user, $passwd) (
$auth = Base64_encode(sprintf('%s:%s', $user,$passwd));
$यह->_संदर्भ = स्ट्रीम_कॉन्टेक्स्ट_क्रिएट(सरणी(
"http" => सरणी(
"विधि" => "पोस्ट",
"हेडर" => "सामग्री-प्रकार: टेक्स्ट/xml\r\n"।
"प्राधिकरण: मूल $auth",

)
));
$यह->_यूआरएल = $यूआरएल;

$this->registerMethod('Test_HelloWorld');

फ़ंक्शन __कॉल($methodName, $params) (
यदि (array_key_exists($methodName,$this->_methods)) (
// एपेल ला फोन्क्शन आरपीसी पर
$m = str_replace('_', '.', $methodName);
$r = xmlrpc_encode_request($m, $params,array("verbosity"=>"newlines_only"));
$c = $यह->_संदर्भ;
स्ट्रीम_कॉन्टेक्स्ट_सेट_ऑप्शन ($c,"http","content",$r);
$f = file_get_contents($this->_url,false,$c);
$सम्मान = xmlrpc_decode($f);
वापसी $सम्मान;
) अन्य (
// एपेल ला फोन्क्शन डी एल"ऑब्जेक्ट पर
call_user_method_array($methodName, $this,$params);
}
}

निजी फ़ंक्शन रजिस्टर विधि ($ विधि) (
$यह->_विधि[$विधि] = सत्य;
}

एक्सएमएल-आरपीसी का परिचय

इंटरनेट पर कई अलग-अलग संसाधन हैं जो उपयोगकर्ताओं को कुछ जानकारी प्रदान करते हैं। इसका मतलब सामान्य स्थैतिक पृष्ठ नहीं है, बल्कि, उदाहरण के लिए, डेटाबेस या अभिलेखागार से पुनर्प्राप्त डेटा। यह वित्तीय डेटा (विनिमय दरें, प्रतिभूति उद्धरण डेटा), मौसम डेटा, या अधिक विशाल जानकारी - समाचार, लेख, मंचों से संदेश का संग्रह हो सकता है। ऐसी जानकारी पृष्ठ विज़िटर को प्रस्तुत की जा सकती है, उदाहरण के लिए, एक फॉर्म के माध्यम से, किसी अनुरोध के जवाब के रूप में, या इसे हर बार गतिशील रूप से उत्पन्न किया जा सकता है। लेकिन कठिनाई यह है कि अक्सर ऐसी जानकारी की आवश्यकता अंतिम उपयोगकर्ता - एक व्यक्ति को नहीं, बल्कि अन्य प्रणालियों और कार्यक्रमों को होती है जो इस डेटा का उपयोग अपनी गणना या अन्य जरूरतों के लिए करेंगे।

वास्तविक उदाहरण: बैंकिंग वेबसाइट का एक पृष्ठ जो मुद्रा उद्धरण प्रदर्शित करता है। यदि आप ब्राउज़र के माध्यम से एक नियमित उपयोगकर्ता के रूप में पृष्ठ तक पहुंचते हैं, तो आप सभी पृष्ठ डिज़ाइन, बैनर, मेनू और अन्य जानकारी देखते हैं जो खोज के वास्तविक उद्देश्य को "फ़्रेम" करते हैं - मुद्रा उद्धरण। यदि आपको इन उद्धरणों को अपने ऑनलाइन स्टोर में दर्ज करने की आवश्यकता है, तो मैन्युअल रूप से आवश्यक डेटा का चयन करने और क्लिपबोर्ड के माध्यम से इसे अपनी वेबसाइट पर स्थानांतरित करने के अलावा और कुछ नहीं बचा है। और ऐसा आपको हर दिन करना होगा. क्या सचमुच कोई रास्ता नहीं है?

यदि आप समस्या को सीधे हल करते हैं, तो एक समाधान तुरंत सामने आता है: एक प्रोग्राम (एक वेबसाइट पर स्क्रिप्ट) जिसे डेटा की आवश्यकता होती है, वह सर्वर से "नियमित उपयोगकर्ता" के रूप में एक पृष्ठ प्राप्त करता है, परिणामी HTML कोड को पार्स (पार्स) करता है और निकालता है। इससे आवश्यक जानकारी. यह या तो रेगुलर रेगुलर एक्सप्रेशन के साथ, या किसी HTML पार्सर का उपयोग करके किया जा सकता है। दृष्टिकोण की कठिनाई इसकी अप्रभावीता में निहित है। सबसे पहले, डेटा का एक छोटा सा हिस्सा प्राप्त करने के लिए (मुद्राओं पर डेटा वस्तुतः एक दर्जन या दो अक्षर का होता है), आपको पूरा पृष्ठ प्राप्त करने की आवश्यकता होती है, जो कम से कम कई दसियों किलोबाइट का होता है। दूसरे, पेज कोड में किसी भी बदलाव के साथ, उदाहरण के लिए, डिज़ाइन बदल गया है या कुछ और, हमारे पार्सिंग एल्गोरिदम को फिर से करना होगा। और इसमें उचित मात्रा में संसाधन लगेंगे.

इसलिए, डेवलपर्स एक निर्णय पर आए - किसी प्रकार का सार्वभौमिक तंत्र विकसित करना आवश्यक है जो पारदर्शी (प्रोटोकॉल और ट्रांसमिशन माध्यम स्तर पर) और प्रोग्रामों के बीच डेटा के आसान आदान-प्रदान की अनुमति देगा जो कहीं भी स्थित हो सकते हैं, किसी भी भाषा में लिखे जा सकते हैं। और किसी भी ऑपरेटिंग सिस्टम, सिस्टम और किसी भी हार्डवेयर प्लेटफ़ॉर्म के अंतर्गत चलाएं। इस तरह के तंत्र को अब बड़े शब्दों में "वेब सेवाएँ", "SOAP", "सेवा-उन्मुख वास्तुकला" कहा जाता है। डेटा विनिमय के लिए, खुले और समय-परीक्षणित मानकों का उपयोग किया जाता है - संदेशों को प्रसारित करने के लिए HTTP प्रोटोकॉल का उपयोग किया जाता है (हालांकि अन्य प्रोटोकॉल का उपयोग किया जा सकता है - उदाहरण के लिए एसएमटीपी)। डेटा स्वयं (हमारे उदाहरण में, विनिमय दर) को क्रॉस-प्लेटफ़ॉर्म प्रारूप में - XML ​​दस्तावेज़ों के रूप में पैक करके प्रसारित किया जाता है। इस उद्देश्य के लिए, एक विशेष मानक का आविष्कार किया गया - SOAP।

हाँ, अब वेब सेवाएँ, SOAP और XML हर किसी की जुबान पर हैं, इन्हें सक्रिय रूप से लागू किया जाना शुरू हो गया है, और IBM और Microsoft जैसे बड़े निगम वेब सेवाओं के संपूर्ण कार्यान्वयन में मदद करने के लिए डिज़ाइन किए गए नए उत्पाद जारी कर रहे हैं।

लेकिन! विनिमय दरों के हमारे उदाहरण के लिए जिसे बैंक की वेबसाइट से ऑनलाइन स्टोर इंजन तक प्रसारित किया जाना चाहिए, ऐसा समाधान बहुत मुश्किल होगा। आख़िरकार, केवल SOAP मानक का वर्णन ही डेढ़ हज़ार पृष्ठों तक का है, और इतना ही नहीं। व्यावहारिक उपयोग के लिए, आपको यह भी सीखना होगा कि तृतीय-पक्ष लाइब्रेरी और एक्सटेंशन के साथ कैसे काम करना है (केवल PHP 5.0 से शुरू होकर इसमें SOAP के साथ काम करने के लिए एक लाइब्रेरी शामिल है), और अपने कोड की सैकड़ों और हजारों लाइनें लिखनी होंगी। और कुछ अक्षर और संख्याएँ प्राप्त करने के लिए यह सब स्पष्ट रूप से बहुत बोझिल और तर्कहीन है।

इसलिए, कोई कह सकता है कि सूचना विनिमय के लिए एक और वैकल्पिक मानक है - XML-RPC। इसे यूजरलैंड सॉफ्टवेयर इंक द्वारा माइक्रोसॉफ्ट की भागीदारी के साथ विकसित किया गया था और इसे इंटरनेट पर अनुप्रयोगों के बीच एकीकृत डेटा ट्रांसफर के लिए डिज़ाइन किया गया है। सरल सेवाओं का निर्माण करते समय यह SOAP की जगह ले सकता है जहां वास्तविक वेब सेवाओं की सभी "उद्यम" क्षमताओं की आवश्यकता नहीं होती है।

संक्षिप्त नाम XML-RPC का क्या अर्थ है? RPC का मतलब रिमोट प्रोसीजर कॉल है। इसका मतलब यह है कि एक एप्लिकेशन (चाहे सर्वर पर एक स्क्रिप्ट हो या क्लाइंट कंप्यूटर पर एक नियमित एप्लिकेशन) पारदर्शी रूप से एक ऐसी विधि का उपयोग कर सकता है जो किसी अन्य कंप्यूटर पर भौतिक रूप से कार्यान्वित और निष्पादित होती है। प्रेषित डेटा का वर्णन करने के लिए एक सार्वभौमिक प्रारूप प्रदान करने के लिए यहां XML का उपयोग किया जाता है। परिवहन के रूप में, HTTP प्रोटोकॉल का उपयोग संदेशों को प्रसारित करने के लिए किया जाता है, जो आपको किसी भी नेटवर्क डिवाइस - राउटर, फ़ायरवॉल, प्रॉक्सी सर्वर के माध्यम से डेटा का निर्बाध रूप से आदान-प्रदान करने की अनुमति देता है।

और इसलिए, उपयोग करने के लिए आपके पास होना चाहिए: एक XML-RPC सर्वर जो एक या अधिक विधियाँ प्रदान करता है, एक XML-RPC क्लाइंट जो एक सही अनुरोध उत्पन्न कर सकता है और सर्वर प्रतिक्रिया को संसाधित कर सकता है, और सफल संचालन के लिए आवश्यक सर्वर मापदंडों को भी जानता है - पता, विधि का नाम और पारित पैरामीटर।

XML-RPC के साथ सभी कार्य "अनुरोध-प्रतिक्रिया" मोड में होते हैं, यह प्रौद्योगिकी और SOAP मानक के बीच अंतरों में से एक है, जहां लेनदेन की अवधारणाएं और विलंबित कॉल करने की क्षमता दोनों हैं (जब सर्वर बचाता है) अनुरोध और भविष्य में एक निश्चित समय पर इसका जवाब देता है)। ये अतिरिक्त सुविधाएं शक्तिशाली कॉर्पोरेट सेवाओं के लिए अधिक उपयोगी हैं; वे सर्वर के विकास और समर्थन को महत्वपूर्ण रूप से जटिल बनाते हैं, और क्लाइंट समाधानों के डेवलपर्स पर अतिरिक्त आवश्यकताएं डालते हैं।

XML-RPC के साथ काम करने की प्रक्रिया एक अनुरोध बनाने से शुरू होती है। एक सामान्य अनुरोध इस तरह दिखता है:

पोस्ट/आरपीसी2 HTTP/1.0
उपयोगकर्ता-एजेंट: ईशॉप-टेस्ट/1.1.1 (फ्रीबीएसडी)
होस्ट:server.localnet.com
सामग्री-प्रकार: टेक्स्ट/एक्सएमएल
सामग्री-लंबाई: 172



परिक्षण विधि
नमस्ते एक्सएमएल-आरपीसी!


पहली पंक्तियाँ मानक HTTP POST अनुरोध शीर्षलेख बनाती हैं। आवश्यक मापदंडों में होस्ट, डेटा प्रकार (एमआईएमई प्रकार), जो टेक्स्ट/एक्सएमएल और संदेश की लंबाई होनी चाहिए, शामिल हैं। मानक यह भी निर्दिष्ट करता है कि उपयोगकर्ता-एजेंट फ़ील्ड अवश्य भरा जाना चाहिए, लेकिन इसमें मनमाना मान हो सकता है।

इसके बाद XML दस्तावेज़ का सामान्य हेडर आता है। अनुरोध का मूल तत्व है , केवल एक ही हो सकता है, और इसमें बच्चों जैसे नोड नहीं हो सकते। इसका मतलब यह है कि एक अनुरोध सर्वर पर केवल एक विधि को कॉल कर सकता है।

रेखा परिक्षण विधिइंगित करता है कि हम TestMetod नामक एक विधि को कॉल कर रहे हैं। यदि आवश्यक हो, तो यहां आप विधि वाले प्रोग्राम या मॉड्यूल का नाम, साथ ही इसके लिए पथ भी निर्दिष्ट कर सकते हैं। XML-RPC विनिर्देश, हालांकि यह वर्णों के सेट पर कुछ प्रतिबंध लगाता है जिनका उपयोग किसी विधि को दर्शाने के लिए किया जा सकता है, उनकी व्याख्या कैसे की जाए यह पूरी तरह से सर्वर कार्यान्वयन पर निर्भर है।

इसके बाद, प्रेषित पैरामीटर सेट किए जाते हैं। इसके लिए इस अनुभाग का उपयोग किया जाता है. जिसमें उपतत्वों की मनमानी संख्या हो सकती है जिसमें टैग द्वारा वर्णित पैरामीटर शामिल है . हम पैरामीटर्स और डेटा प्रकारों पर थोड़ा और ध्यान देंगे। हमारे संस्करण में, विधि टैग में संलग्न एक स्ट्रिंग पैरामीटर को पारित करती है .

टैग बंद करने के बाद सभी मापदंडों का विवरण दिया जाता है। XML-RPC में अनुरोध और प्रतिक्रिया नियमित XML दस्तावेज़ हैं, इसलिए सभी टैग बंद होने चाहिए। लेकिन XML-RPC में एक भी टैग नहीं हैं, हालाँकि वे XML मानक में मौजूद हैं।

अब आइए सर्वर की प्रतिक्रिया देखें। HTTP प्रतिक्रिया शीर्षलेख सामान्य है; यदि अनुरोध सफलतापूर्वक संसाधित हो जाता है, तो सर्वर HTTP/1.1 200 OK प्रतिक्रिया देता है। अनुरोध की तरह ही, आपको MIME प्रकार, संदेश की लंबाई और प्रतिक्रिया निर्माण तिथि को सही ढंग से निर्दिष्ट करना होगा।

प्रतिक्रिया निकाय स्वयं इस प्रकार है:



सत्य


अब रूट टैग की जगह टैग दर्शाया गया है , जिसमें अनुरोध प्रसंस्करण के परिणाम तुरंत शामिल होते हैं। दुर्भाग्यवश, प्रतिक्रिया विधि नाम को पास नहीं करती है, इसलिए यदि एक ही समय में विभिन्न विधियों को कॉल किया जाता है तो भ्रम से बचने के लिए आपको इसे क्लाइंट साइड पर संग्रहीत करना चाहिए।

यदि आपके अनुरोध को संसाधित करते समय कोई त्रुटि उत्पन्न हुई, तो इसके बजाय प्रतिक्रिया में तत्व शामिल होगा , जिसमें त्रुटि का वर्णन करने वाली एक संरचना निहित होगी। त्रुटि विवरण में एक संख्यात्मक त्रुटि कोड और एक पाठ विवरण शामिल है।

आइए अब XML-RPC में डेटा प्रकारों पर एक संक्षिप्त नज़र डालें। कुल मिलाकर 9 डेटा प्रकार हैं - सात सरल प्रकार और 2 जटिल। प्रत्येक प्रकार का वर्णन उसके अपने टैग या टैग के सेट (जटिल प्रकारों के लिए) द्वारा किया जाता है।

सरल प्रकार:

पूर्ण संख्याएं- टैग या ;

बूलियन प्रकार- टैग , 0/1 और सत्य/गलत दोनों मान ले सकता है;

ASCII स्ट्रिंग- टैग द्वारा वर्णित और इसमें वर्णों की एक मनमानी स्ट्रिंग हो सकती है;

दशमलव संख्याएं- टैग , इसमें एक संख्या चिह्न भी हो सकता है, भिन्नात्मक भाग को एक बिंदु द्वारा अलग किया जाता है;

तिथि और समय- टैग द्वारा वर्णित और ISO8601 प्रारूप का अनुपालन करना होगा। स्क्रिप्ट में आगे की प्रक्रिया के लिए, यह प्रारूप थोड़ा असुविधाजनक है, इसलिए अनुरोध भेजते/प्राप्त करते समय इसे हमेशा परिवर्तित किया जाता है। यह लाइब्रेरी के भीतर एक विशेष फ़ंक्शन द्वारा किया जा सकता है, या, यदि कोई नहीं है, तो डेवलपर को तारीख को मैन्युअल रूप से परिवर्तित करना होगा।

अंतिम सरल प्रकार है बेस64 एन्कोडेड स्ट्रिंग, जिसका वर्णन टैग द्वारा किया गया है . यह प्रकार सार्वभौमिक है; इसका उपयोग क्लाइंट और सर्वर के बीच किसी भी डेटा को स्थानांतरित करने के लिए किया जा सकता है, हालांकि ऐसे एन्कोडिंग के कारण स्थानांतरित डेटा की मात्रा बढ़ जाती है। लेकिन यह प्रोटोकॉल की पाठ्य प्रकृति और विशेष रूप से XML प्रारूप का परिणाम है।

जटिल प्रकार संरचनाओं और सरणियों द्वारा दर्शाए जाते हैं। संरचना मूल तत्व द्वारा निर्धारित होती है , जिसमें तत्वों की मनमानी संख्या हो सकती है , संरचना के प्रत्येक सदस्य को परिभाषित करना। एक संरचना सदस्य को दो टैग द्वारा वर्णित किया गया है: पहला, , सदस्य के नाम का वर्णन करता है, दूसरा, , में सदस्य का मान शामिल है (डेटा प्रकार का वर्णन करने वाले टैग के साथ)।

ऐरे का कोई नाम नहीं है और टैग द्वारा वर्णित किया गया है जिसमें एक तत्व शामिल है , और एक या अधिक बाल तत्व , जहां विशिष्ट डेटा निर्दिष्ट है। एक सारणी में किसी भी क्रम में किसी भी अन्य प्रकार के साथ-साथ अन्य सारणियाँ भी हो सकती हैं, जो आपको बहुआयामी सारणियों का वर्णन करने की अनुमति देती है। आप संरचनाओं की एक श्रृंखला का भी वर्णन कर सकते हैं। लेकिन यह तथ्य कि सरणी का कोई नाम नहीं है, कुछ मामलों में इसके उपयोग को जटिल बनाता है; जटिल डेटा को स्थानांतरित करने के लिए, उन्हें बार-बार अन्य प्रकारों में पैक करना पड़ता है (उदाहरण के लिए, कई सरणी स्थानांतरित करने के लिए, आप प्रत्येक सरणी को अलग से एक संरचना में पैक कर सकते हैं , और फिर इन संरचनाओं से एक सरणी बनाएं)।

बेशक, कोई कहेगा कि डेटा प्रकारों की ऐसी सूची बहुत खराब है और "आपको विस्तार करने की अनुमति नहीं देती है।" हाँ, यदि आपको जटिल वस्तुओं या बड़ी मात्रा में डेटा स्थानांतरित करने की आवश्यकता है, तो SOAP का उपयोग करना बेहतर है। और छोटे, बिना मांग वाले अनुप्रयोगों के लिए, XML-RPC काफी उपयुक्त है; इसके अलावा, अक्सर इसकी क्षमताएं भी बहुत अधिक हो जाती हैं! तैनाती में आसानी, लगभग किसी भी भाषा और प्लेटफ़ॉर्म के लिए बहुत बड़ी संख्या में लाइब्रेरी और PHP में व्यापक समर्थन को ध्यान में रखते हुए, XML-RPC का अक्सर कोई प्रतिस्पर्धी नहीं होता है। हालाँकि इसे तुरंत एक सार्वभौमिक समाधान के रूप में अनुशंसित नहीं किया जा सकता है - प्रत्येक विशिष्ट मामले में इसे परिस्थितियों के अनुसार तय किया जाना चाहिए।

XML-RPC तकनीक का उपयोग वर्डप्रेस सिस्टम में विभिन्न अच्छी सुविधाओं जैसे पिंगबैक, ट्रैकबैक, एडमिन पैनल में लॉग इन किए बिना रिमोट साइट प्रबंधन आदि के लिए किया जाता है। दुर्भाग्य से, हमलावर इसका उपयोग वेबसाइटों पर DDoS हमले करने के लिए कर सकते हैं। यानी, आप अपने लिए या ऑर्डर करने के लिए सुंदर, दिलचस्प WP प्रोजेक्ट बनाते हैं, और साथ ही, बिना किसी संदेह के, आप DDoS बॉटनेट का हिस्सा बन सकते हैं। दसियों और सैकड़ों-हजारों साइटों को एक साथ जोड़कर, बुरे लोग अपने शिकार पर एक शक्तिशाली हमला करते हैं। हालाँकि साथ ही आपकी साइट को भी नुकसान होता है, क्योंकि... लोड उस होस्टिंग पर जाता है जहां वह स्थित है।

ऐसी ख़राब गतिविधि का सबूत सर्वर लॉग (nginx में access.log) में हो सकता है, जिसमें निम्नलिखित पंक्तियाँ हैं:

103.238.80.27 - - "पोस्ट /wp-login.php HTTP/1.0" 200 5791 "-" "-"

लेकिन आइए XML-RPC भेद्यता पर वापस लौटें। दृश्यमान रूप से, यह आपके सर्वर पर साइटों के धीमी गति से खुलने या उन्हें लोड करने में असमर्थता (502 खराब गेटवे त्रुटि) में प्रकट होता है। मेरे FASTVPS होस्ट के तकनीकी समर्थन ने मेरे अनुमानों की पुष्टि की और सलाह दी:

  1. प्लगइन्स के साथ वर्डप्रेस को नवीनतम संस्करण में अपडेट करें। सामान्य तौर पर, यदि आप अनुसरण करते हैं, तो आपने नवीनतम 4.2.3 को स्थापित करने की आवश्यकता के बारे में पढ़ा होगा। सुरक्षा आलोचनाओं के कारण (पिछले संस्करणों की तरह)। संक्षेप में, अद्यतन करना अच्छा है।
  1. अक्षम XML-RPC पिंगबैक प्लगइन स्थापित करें।

वर्डप्रेस में XML-RPC को अक्षम करना

पहले, मुझे ऐसा लगता था कि XML-RPC को सक्षम/अक्षम करने का विकल्प सिस्टम सेटिंग्स में कहीं था, लेकिन अब मैं इसे वहां नहीं ढूंढ पा रहा हूं। इसलिए, इससे छुटकारा पाने का सबसे आसान तरीका उचित प्लगइन का उपयोग करना है।

डिसेबल XML-RPC पिंगबैक ढूंढें और डाउनलोड करें या इसे सीधे सिस्टम एडमिन पैनल से इंस्टॉल करें। आपको कुछ भी अतिरिक्त कॉन्फ़िगर करने की आवश्यकता नहीं है, मॉड्यूल तुरंत काम करना शुरू कर देता है। यह XML-RPC इंटरफ़ेस से pingback.ping और pingback.extensions.getPingbacks विधियों को हटा देता है। इसके अतिरिक्त, यह HTTP हेडर से एक्स-पिंगबैक को हटा देता है।

एक ब्लॉग में मुझे XML-RPC अक्षमता को हटाने के लिए कुछ और विकल्प मिले।

1. टेम्पलेट में XML-RPC अक्षम करें।

ऐसा करने के लिए, थीम की function.php फ़ाइल में निम्न पंक्ति जोड़ें:

आदेश अस्वीकार करें, अनुमति दें सभी से इनकार करें

मैंने व्यक्तिगत रूप से अंतिम दो विधियों का उपयोग नहीं किया, क्योंकि... मैंने डिसेबल XML-RPC पिंगबैक प्लगइन कनेक्ट किया - मुझे लगता है कि यह पर्याप्त होगा। केवल उन लोगों के लिए जिन्हें अनावश्यक इंस्टॉलेशन पसंद नहीं है, मैंने वैकल्पिक विकल्प सुझाए हैं।

शनिवार को दोपहर से, मेरा सर्वर, जहाँ लगभग 25 वर्डप्रेस साइटें होस्ट की जाती हैं, गंभीर मंदी का अनुभव करने लगा। चूंकि मैं पिछले हमलों ( , ) से बिना ध्यान दिए बच निकलने में कामयाब रहा, मुझे तुरंत समझ नहीं आया कि क्या हो रहा था।

जब मैंने इसका पता लगाया, तो यह पता चला कि पासवर्ड को जबरदस्ती मजबूर किया जा रहा था + XMLRPC के लिए कई अनुरोध।

परिणामस्वरूप, हम यह सब ख़त्म करने में कामयाब रहे, हालाँकि तुरंत नहीं। इससे बचने के लिए यहां तीन सरल युक्तियां दी गई हैं।

ये तकनीकें संभवतः सभी को ज्ञात हैं, लेकिन मैंने कुछ गलतियों पर कदम उठाया जो मुझे विवरण में नहीं मिलीं - शायद इससे किसी का समय बचेगा।

1. खोज बंद करें, लिमिट लॉगिन अटेम्प्ट्स प्लगइन इंस्टॉल करें - इसे इंस्टॉल करें, क्योंकि अन्य सुरक्षा सर्वर को बहुत धीमा कर देती है, उदाहरण के लिए, लॉगिन सिक्योरिटी सॉल्यूशन प्लगइन का उपयोग करते समय, सर्वर आधे घंटे के बाद बंद हो जाता है, प्लगइन डेटाबेस को भारी लोड करता है .

सेटिंग्स में, "प्रॉक्सी के लिए" चेकबॉक्स चालू करना सुनिश्चित करें - अन्यथा यह सभी के लिए आपके सर्वर का आईपी निर्धारित करेगा और स्वचालित रूप से सभी को ब्लॉक कर देगा।
अद्यतन करें, धन्यवाद, विवरण नीचे टिप्पणियों में हैं - "प्रॉक्सी के लिए" चेकबॉक्स को केवल तभी सक्षम करें जब "डायरेक्ट कनेक्शन" सक्षम होने पर परिभाषा काम न करे।

2. XML-RPC अक्षम करें - XML-RPC प्लगइन अक्षम करें (इसे सक्रिय करना आसान है और बस इतना ही)।

3. wp-login.php बंद करें - यदि आप आईपी के माध्यम से साइट तक पहुंचते हैं, तो प्लगइन काम नहीं करता है और पिकर साइट को क्रैश करना जारी रखता है। इससे बचने के लिए, .htaccess में जोड़ें:

आदेश अस्वीकार करें, अनुमति दें सभी से इनकार करें

हम wp-लॉगिन फ़ाइल की प्रतिलिपि बनाते हैं, इसे किसी भी अजीब नाम पर पुनर्नामित करते हैं, उदाहरण के लिए पोलेटनॉर्मलनी.php, और फ़ाइल के अंदर, सभी wp-login.php शिलालेखों को पोलेटनॉर्मलनी.php में बदलने के लिए ऑटोकरेक्ट का उपयोग करते हैं।
बस, अब आप केवल अपनी फ़ाइल का उपयोग करके एडमिन पैनल तक पहुंच सकते हैं।

इन 3 सरल चरणों के बाद, साइटें फिर से उड़ने लगीं और शांति आ गई।

खैर, अचानक यह दिलचस्प हो गया

विकल्पों में से एक यह देखना है कि क्या आप पर हमला किया जा रहा है। इसे nginx लॉग में देखा जा सकता है (उदाहरण के लिए, यहां डेबियन /var/log/nginx access.log फ़ाइल के लिए पथ है)।

वर्डप्रेस में हमेशा आपकी साइट तक दूरस्थ रूप से पहुंचने के लिए एक अंतर्निहित टूल होता है। वास्तव में, कभी-कभी आपको अपनी साइट पर जाने की आवश्यकता होती है, लेकिन आपका कंप्यूटर आपसे बहुत दूर होता है। लंबे समय तक, समाधान xmlrpc.php नामक फ़ाइल थी। हालाँकि, हाल के वर्षों में यह फ़ाइल समाधान से अधिक समस्या बन गई है।

नीचे हम xmlrpc.php पर बारीकी से नज़र डालेंगे और इसे क्यों बनाया गया। हम इसके कारण होने वाली सामान्य सुरक्षा समस्याओं पर भी गौर करेंगे और आपकी वर्डप्रेस साइट के लिए उन्हें कैसे ठीक किया जाए।

XML-RPC एक वर्डप्रेस सुविधा है जो डेटा ट्रांसफर की अनुमति देती है, जिसमें HTTP ट्रांसपोर्ट के रूप में और XML एन्कोडिंग के रूप में कार्य करता है। चूँकि वर्डप्रेस एक बंद प्रणाली नहीं है और अक्सर अन्य प्रणालियों के साथ संचार करता है, इस समस्या का समाधान ढूंढ लिया गया है।

उदाहरण के लिए, मान लें कि आप अपने मोबाइल फोन से अपनी वेबसाइट पर पोस्ट करना चाहते हैं। आपको xmlrpc.php द्वारा प्रदान की गई रिमोट एक्सेस का उपयोग करने की आवश्यकता है।

xmlrpc.php की मुख्य कार्यक्षमता स्मार्टफोन से साइट से जुड़ने की क्षमता, अन्य साइटों से ट्रैकबैक और लिंकबैक का कार्यान्वयन और जेटपैक प्लगइन से संबंधित कुछ कार्य हैं।

Xmlrpc.php क्यों बनाया गया और इसका उपयोग कैसे किया गया?

XML-RPC का कार्यान्वयन वर्डप्रेस के शुरुआती दिनों से लेकर वर्डप्रेस के वर्डप्रेस बनने से भी पहले का है।

इंटरनेट के शुरुआती दिनों में, कनेक्शन बहुत धीमे थे और वेब पर रिकॉर्डिंग और प्रकाशन की प्रक्रिया बहुत अधिक कठिन और समय लेने वाली थी। सीधे ब्राउज़र के माध्यम से परिवर्तन करने के बजाय, अधिकांश ने उन्हें ऑफ़लाइन कर दिया और फिर उनकी सामग्री को कॉपी करके ऑनलाइन पेस्ट कर दिया। और यह प्रक्रिया आदर्श से कोसों दूर थी.

समाधान (उस समय) एक ऑफ़लाइन ब्लॉगिंग क्लाइंट बनाना था जहाँ आप अपनी सामग्री बना सकते थे, फिर अपने ब्लॉग से जुड़ सकते थे और उसे प्रकाशित कर सकते थे। यह कनेक्शन XML-RPC के माध्यम से बनाया गया था। कोर XML-RPC कार्यक्षमता के साथ, इन कनेक्शनों का उपयोग करने वाले शुरुआती अनुप्रयोगों ने लोगों को अन्य उपकरणों से अपनी वर्डप्रेस साइटों तक पहुंचने की क्षमता दी।

एक्सएमएल-आरपीसी आज

2008 में, वर्डप्रेस के संस्करण 2.6 के साथ, XML-RPC को सक्षम या अक्षम करने के लिए एक विकल्प पेश किया गया था। हालाँकि, वर्डप्रेस iPhone ऐप के रिलीज़ होने के साथ, XML-RPC समर्थन डिफ़ॉल्ट रूप से सक्षम हो गया था और इसे अक्षम करने का कोई विकल्प नहीं था। आज भी ऐसा ही है.

बेशक, इस फ़ाइल द्वारा प्रदान की जाने वाली कार्यक्षमता समय के साथ काफी कम हो गई है, और फ़ाइल का आकार 83kb से घटकर 3kb हो गया है, यह अब पहले जैसी भूमिका नहीं निभाता है।

एक्सएमएल-आरपीसी गुण

नए वर्डप्रेस एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) के साथ, हम उम्मीद कर सकते हैं कि XML-RPC पूरी तरह से अक्षम हो जाएगा। आज यह नया एपीआई अभी भी परीक्षण में है और इसे केवल एक विशेष प्लगइन के माध्यम से सक्षम किया जा सकता है।

हालाँकि आप उम्मीद कर सकते हैं कि भविष्य में एपीआई को सीधे वर्डप्रेस कोर में शामिल किया जाएगा, जिससे xmlrpc.php की आवश्यकता पूरी तरह समाप्त हो जाएगी।

नया एपीआई सही नहीं है, लेकिन यह xmlrpc.php के विपरीत, अच्छी, विश्वसनीय सुरक्षा प्रदान करता है।

Xmlrpc.php को अक्षम क्यों करें?

XML-RPC के साथ सबसे बड़ा मुद्दा सुरक्षा है। समस्या सीधे तौर पर XML-RPC से संबंधित नहीं है, लेकिन इसका उपयोग आपकी साइट पर हमले को सक्षम करने के लिए किया जा सकता है।

बेशक, आप एक बहुत ही मजबूत पासवर्ड और वर्डप्रेस सुरक्षा प्लगइन्स से अपनी सुरक्षा कर सकते हैं। लेकिन सबसे अच्छा सुरक्षा तरीका इसे बंद करना ही है।

XML-RPC की दो मुख्य कमजोरियाँ हैं जिनका अतीत में फायदा उठाया गया है।

पहला आपकी साइट तक पहुंच प्राप्त करने के लिए क्रूर बल के हमलों का उपयोग करता है। हमलावर उपयोगकर्ता नाम और पासवर्ड के विभिन्न संयोजनों का प्रयास करके xmlrpc.php का उपयोग करके आपकी साइट तक पहुंच प्राप्त करने का प्रयास करेगा। वे सैकड़ों विभिन्न पासवर्डों का परीक्षण करने के लिए एक कमांड का प्रभावी ढंग से उपयोग कर सकते हैं। यह उन्हें सुरक्षा उपकरणों को बायपास करने की अनुमति देता है जो आम तौर पर क्रूर बल के हमलों का पता लगाते हैं और उन्हें रोकते हैं।

दूसरा DDoS हमले के माध्यम से साइट को ऑफ़लाइन ले जाना है। हैकर्स एक ही समय में हजारों साइटों पर भेजने के लिए वर्डप्रेस में रिवर्स नोटिफिकेशन का उपयोग करेंगे। यह xmlrpc.php कार्यक्षमता हैकर्स को DDoS हमले को फैलाने के लिए लगभग अनंत संख्या में IP पते देती है।

यह जांचने के लिए कि XML-RPC आपकी साइट पर काम कर रहा है या नहीं, आप इसे XML-RPC वैलिडेटर नामक टूल का उपयोग करके चला सकते हैं। टूल के साथ अपनी साइट चलाएं और यदि आपको कोई त्रुटि मिलती है, तो इसका मतलब है कि आपके पास XML-RPC समर्थन नहीं है।

यदि आपको सफलता संदेश प्राप्त होता है, तो आप नीचे दिए गए दो तरीकों में से किसी एक का उपयोग करके xmlrpc.php को रोक सकते हैं।

विधि 1: प्लगइन का उपयोग करके Xmlrpc.php को अक्षम करें

अपनी वर्डप्रेस साइट पर XML-RPC को अक्षम करना अविश्वसनीय रूप से आसान है।

अनुभाग पर जाएँ प्लगइन्स › नया जोड़ेंआपके वर्डप्रेस एडमिन कंसोल में। एक प्लगइन खोजें एक्सएमएल-आरपीसी अक्षम करेंऔर इसे इंस्टॉल करें, यह नीचे दी गई तस्वीर जैसा दिखता है:

प्लगइन सक्रिय करें और आपका काम हो गया। यह प्लगइन XML-RPC को अक्षम करने के लिए स्वचालित रूप से आवश्यक कोड डाल देगा।

हालाँकि, याद रखें कि इंस्टॉल किए गए प्लगइन्स XML-RPC के कुछ हिस्सों का उपयोग कर सकते हैं, और फिर इसे अक्षम करने से प्लगइन्स या उनके अलग-अलग हिस्सों के बीच टकराव हो सकता है और वे कार्यशील मोड से बाहर हो सकते हैं।

यदि आप केवल व्यक्तिगत XML-RPC तत्वों को अक्षम करना चाहते हैं लेकिन अन्य प्लगइन्स और सुविधाओं को काम करने की अनुमति देना चाहते हैं, तो इन जैसे प्लगइन्स को देखें:

  • XML-RPC आक्रमण रोकें. यह प्लगइन सभी XML-RPC हमलों को रोक देगा, लेकिन यह जेटपैक और अन्य स्वचालित टूल और प्लगइन्स जैसे प्लगइन्स को xmlrpc.php फ़ाइलों तक पहुंच प्रदान करके चलते रहने की अनुमति देगा।
  • XML-RPC प्रकाशन को नियंत्रित करें। यह आपको नियंत्रण बनाए रखने और दूर से प्रकाशित करने की अनुमति देता है।

विधि 2: Xmlrpc.php को मैन्युअल रूप से अक्षम करें

यदि आप प्लगइन का उपयोग नहीं करना चाहते हैं और इसे मैन्युअल रूप से करना पसंद करते हैं, तो इस दृष्टिकोण का पालन करें। यह वर्डप्रेस को पास होने से पहले आने वाले सभी xmlrpc.php अनुरोधों को रोक देगा।

.htaccess फ़ाइल खोलें. इस फ़ाइल को ढूंढने के लिए आपको अपने फ़ाइल प्रबंधक या एफ़टीपी क्लाइंट में 'छिपी हुई फ़ाइलें दिखाएं' सक्षम करना पड़ सकता है।

इस कोड को फ़ाइल में पेस्ट करें .htaccess:

# वर्डप्रेस xmlrpc.php अनुरोधों को ब्लॉक करें आदेश अस्वीकार करें, सभी से इनकार की अनुमति दें 123.123.123.123 से अनुमति दें

अंतिम विचार

कुल मिलाकर, XML-RPC आपकी वर्डप्रेस साइट पर दूरस्थ प्रकाशन के साथ आने वाली कुछ समस्याओं का एक ठोस समाधान था। हालाँकि, उसी समय, कुछ सुरक्षा खामियाँ सामने आईं जो कुछ वर्डप्रेस साइट मालिकों के लिए काफी खतरनाक साबित हुईं।

अपनी साइट को सुरक्षित रखने के लिए, xmlrpc.php को पूरी तरह से अक्षम करने की अनुशंसा की जाती है जब तक कि आपको दूरस्थ प्रकाशन और जेटपैक प्लगइन के लिए आवश्यक कुछ सुविधाओं की आवश्यकता न हो। फिर आप वर्कअराउंड प्लगइन्स का उपयोग कर सकते हैं जो आपको सुरक्षा छेदों को ठीक करते समय इन सुविधाओं का उपयोग करने की अनुमति देते हैं।

समय के साथ, हम उम्मीद कर सकते हैं कि XML-RPC कार्यक्षमता एक नए वर्डप्रेस एपीआई में एकीकृत हो जाएगी जो सुरक्षा से समझौता किए बिना रिमोट एक्सेस का समर्थन करेगी।

क्या आपने प्लगइन के माध्यम से या मैन्युअल रूप से XML-RPC तक पहुंच को अवरुद्ध कर दिया है? या क्या इसके पहले सक्रिय होने के कारण कोई सुरक्षा समस्याएँ थीं? नीचे टिप्पणी में अपना अनुभव साझा करें।