पैनल का मालिक जब सुरक्षा के बारे में सोचता है, तो बाहर से होने वाले हमले के बारे में सोचता है: लोड, पासवर्ड अनुमान, कमज़ोरी खोजने वाले स्कैनर। पर खुले API वाले पैनल का एक दूसरा दरवाज़ा भी होता है, और वह पूरी तरह जायज़ दिखता है: अनुरोध वैध कुंजी के साथ, आपके ही पंजीकृत ग्राहक की तरफ़ से आते हैं और सामान्य ट्रैफ़िक से अलग नहीं दिखते। यहाँ देखते हैं कि एक बायर एक ही curl पंक्ति से आपके पैनल का क्या कर सकता है, इसे कौन-सी जाँचें रोकती हैं, और बटन छिपाने से कुछ क्यों नहीं होता।
वह हमला जिसके पास आपकी कुंजी है
आम हमले से फ़र्क़ बुनियादी है, और बाक़ी सब उसी से निकलता है। बाहरी हमला दरवाज़े पर ही रोका जाता है: ट्रैफ़िक छननी, लॉगिन कोशिशों की सीमा, कैप्चा - इसके लिए पैनल सुरक्षा पर अलग लेख है। यहाँ उलटा है: ट्रैफ़िक जायज़ है, कुंजी असली है, ग्राहक मौजूद है, और दरवाज़े की कोई छननी इस अनुरोध को नहीं रोकेगी।
और अक्सर इसमें बुरी नीयत होती भी नहीं। व्यवहार में तीन स्रोत हैं:
- वह बायर जिसने काम लापरवाही से अपने-आप चलने लगाया। उसकी स्क्रिप्ट हर ऑर्डर का स्टेटस हर दस सेकंड में पूछती है, किसी भी त्रुटि पर चक्कर लगाकर दोबारा कोशिश करती है, और जवाब देर से आने पर ऑर्डर दूसरी बार भेज देती है। वह हमला नहीं कर रहा, उसने बस सोचा नहीं।
- वह ग्राहक जो सीमाएँ टटोल रहा है। एक इकाई का ऑर्डर, दस लाख का ऑर्डर, ख़ाली लिंक,
statusमें किसी और का ऑर्डर नंबर। आम तौर पर जिज्ञासा, कभी-कभी टोह। - वह जिसके हाथ किसी और की कुंजी लग गई। कुंजियाँ बायर के रिपॉज़िटरी से, स्क्रीनशॉट से या पुराने कर्मचारी से रिसती हैं। पैनल के लिए वह अब भी «आपका ग्राहक» है।
मुख्य नियम: इंटरफ़ेस कुछ भी नहीं बचाता
ठोकर सबसे ज़्यादा यहीं लगती है। बटन छिपाना, सेवा को स्टोरफ़्रंट से हटाना, कोई हिस्सा बंद करना - ये सब सिर्फ़ वह बदलते हैं जो ब्राउज़र देखता है। कुंजी वाला ग्राहक ब्राउज़र खोलता ही नहीं।
हमारे कोर में यह नियम तीन अलग सर्वर जाँचों से बँधा है, और हर एक की टिप्पणी में वही बात लिखी है: उसके बिना रोक एक curl पंक्ति से पार हो जाती।
- छिपी सेवा फिर भी ऑर्डर हो सकती है। भौगोलिक पाबंदी, स्टोरफ़्रंट से हटाना, «छिपी» का निशान - ये दिखाने से जुड़े हैं। जाँच सर्वर पर, ऑर्डर देने के पल में होनी चाहिए, वरना जिस देश के लिए आपने सेवा कैटलॉग से हटाई, वहाँ सीधे अनुरोध से वह आराम से ऑर्डर हो जाएगी।
- बंद किया गया काम फिर भी बुलाया जा सकता है। अगर आपने ग्राहकों को रद्द करना या रिफ़िल माँगना मना किया है, तो बटन खाते से हट जाएगा, पर API मेथड वहीं रहेगा। अधिकार वहीं जाँचे जाने चाहिए जहाँ काम असल में होता है।
- रोके गए ग्राहक के पास कुंजी बनी रहती है। रोक लॉगिन बंद करती है, पर उसके हाथ की कुंजी वैसी ही रहती है। अगर API खाते की हालत नहीं पूछता, तो रोक एक सेकंड में पार हो जाती है।
और चौथी, सबसे आम बात। ऑर्डर की सारी जाँचें - सेवा उपलब्ध है या नहीं, मात्रा की सीमाएँ, ईमेल पुष्टि, सेवा का प्रकार, बैलेंस पूरा पड़ता है या नहीं - एक ही जगह रहनी चाहिए जहाँ से सारे रास्ते गुज़रें: स्टोरफ़्रंट का फ़ॉर्म भी, API भी, और मेहमान चेकआउट भी। उन्हें बुलाने वालों में बाँटना ठीक नहीं: देर-सबेर एक रास्ता वह मान लेगा जो दूसरा ठुकराता है, और यह फ़र्क़ चुपचाप बनेगा।
नक़ली और कचरा ऑर्डर
दूसरी परत वे ऑर्डर हैं जो नियम से वैध हैं पर आपको कुछ नहीं देते। हर एक प्रोवाइडर तक जाता है, उसकी सीमाएँ खाता है और सुलझाने में आपका वक़्त लेता है।
- एक ही लिंक पर दोहरे ऑर्डर। लापरवाह बायर स्क्रिप्ट का सबसे आम लक्षण: जवाब देर से आया, स्क्रिप्ट ने समझा कि ऑर्डर बना ही नहीं, और दोबारा भेज दिया। इलाज सेवा स्तर का एक निशान है: जब तक पिछला ऑर्डर चल रहा है, उसी सेवा के उसी लिंक पर दूसरा ऑर्डर न लेना। एक ब्योरा अहम है - पूरे हो चुके और रद्द ऑर्डर रोक नहीं लगाने चाहिए, क्योंकि डिलीवरी के बाद दोबारा ऑर्डर देना पूरी तरह जायज़ है, और उस पर रोक सिर्फ़ एक टिकट पैदा करेगी।
- सीमा से बाहर की मात्रा। सेवा का न्यूनतम और अधिकतम सर्वर पर जाँचा जाना चाहिए। अलग से - क़दम: अगर प्रोवाइडर सिर्फ़ सैकड़ों में लेता है, तो 250 का ऑर्डर ठुकरा दिया जाएगा, और पैसे ग्राहक के बैलेंस से निकल चुके होंगे।
- drip-feed की किस्तें। यहाँ सावधान इंटीग्रेटर भी चूकते हैं। सेवा की सीमाएँ किस्त पर लगती हैं, यानी एक बार चलने के हिस्से पर, ऑर्डर के कुल पर नहीं। कुल के हिसाब से जाँच ऐसा ऑर्डर निकाल देगी जिसे प्रोवाइडर पहली ही बार में बिगाड़ देगा।
- ग़लत सेवा प्रकार। कस्टम कमेंट में मात्रा पंक्तियों की गिनती है, पैकेज सेवाओं की क़ीमत प्रति ऑर्डर है, और सब्सक्रिप्शन की क़ीमत हिस्से से लगती ही नहीं। अगर API हर प्रकार पर बिना भेद के
quantityलेता है, तो आपका हिसाब प्रोवाइडर के हिसाब से अलग हो जाएगा। कौन-से प्रकार हैं और उनके क्या मानक हैं, यह API मेथड की संदर्भिका में है।
लिमिट जला देना
तीसरी परत सबसे कष्टकर है, क्योंकि यह एक ग्राहक पर नहीं, सब पर एक साथ पड़ती है। बिना रुके चक्कर में स्टेटस पूछने वाली स्क्रिप्ट साझा अनुरोध बजट खा जाती है, और उसके साथ बाक़ी सारे बायर अटक जाते हैं।
कुछ अंदाज़े। हमारे यहाँ ग्राहक API मिनट में सौ से कुछ ज़्यादा अनुरोधों तक सीमित है और एडमिन API क़रीब तीन गुना; यह असंगति नहीं है: ग्राहक कुंजी आम तौर पर कोई इंसान या छोटी स्क्रिप्ट चलाती है, जबकि एडमिन API पर रोबोट आता है और झुंड में। प्रचलित इंजन वाले पैनलों में सीमा और सख़्त है - प्रति पैनल क़रीब पाँच अनुरोध प्रति सेकंड, और असली इंटीग्रेशन में उससे टकराना सोच से आसान है।
दो नतीजे जिनकी पहले से योजना कम ही बनती है:
- बजट साझा है, दोषी एक। अगर गिनती कुंजी से नहीं, पते से होती है, तो एक ही नेटवर्क के कई बायर एक बजट बाँटते हैं। एक लापरवाह स्क्रिप्ट बाक़ियों का काम रोक देती है, और शिकायत करने सब आते हैं।
- किसी और की सीमाएँ भी आपकी हैं। पैनल प्रोवाइडर के पास उसके नियमों से जाता है, और एक ही ग्राहक की ऑर्डर बाढ़ वहाँ आपका हिस्सा जला देती है। फिर उसका API हर चीज़ पर इनकार देने लगता है, और सुलझाना आपको पड़ता है।
इसका सही जवाब रोक नहीं, बल्कि बैच मेथड और साफ़ दस्तावेज़ हैं। सौ तक नंबरों का स्टेटस एक झुंड में पूछना वही काम करता है जो एक-एक ऑर्डर का चक्कर, पर दोनों पक्षों के लिए सौ गुना सस्ता। अगर आपके बायर यह नहीं जानते, तो वे एक-एक करके पीटते रहेंगे।
कुंजियों का क्या करें
- कुंजी लंबी और बेतरतीब हो। क्रिप्टोग्राफ़िक जनरेटर से साठ के आसपास अक्षर। ग्राहक के नंबर या ईमेल से बनी कुंजी अनुमान से निकल आती है।
- दोबारा जारी करना एक बटन हो, सपोर्ट टिकट नहीं। रिसाव दुर्लभ नहीं है, और अगर उसे ठीक करने में चिट्ठी-पत्री लगे तो ग्राहक कुछ भी नहीं करेगा।
- कुंजी बाहर लौटनी नहीं चाहिए। न API जवाबों में, न निर्यात में, न एडमिन की ग्राहक सूची में। एक बार दिखाई, उसके बाद सिर्फ़ नई जारी।
- सिर्फ़ HTTPS। कुंजी अनुरोध के मानक के तौर पर जाती है, यानी बिना एन्क्रिप्शन वाले प्रोटोकॉल पर वह बीच के हर पड़ाव को पूरी दिखती है।
यह सब दिखेगा कैसे
भीतर से होने वाले दुरुपयोग की असल दिक़्क़त यह है कि वह दिक़्क़त जैसा दिखता ही नहीं: ऑर्डर बनते हैं, पैसा चलता है, पैनल काम करता है। कम से कम इतना होना चाहिए:
- ऑर्डर पर स्रोत का निशान। कुंजी से दिया ऑर्डर स्टोरफ़्रंट से दिए ऑर्डर से अलग पहचाना जाना चाहिए। इसके बिना आप यह भी नहीं बता पाएँगे कि आपके कारोबार का कितना हिस्सा API से जाता है।
- ग्राहकवार बँटवारा। जो अकेला बायर नब्बे प्रतिशत अनुरोध और दो प्रतिशत कमाई देता है, वह इसी बँटवारे में दिखता है। नियमित रूप से और क्या देखना चाहिए, यह पैनल के मेट्रिक्स वाले लेख में है।
- सिर्फ़ सफलताएँ नहीं, इनकार भी। «ग़लत API कुंजी» जवाबों में उछाल का मतलब कोई अनुमान लगा रहा है। «ग़लत सेवा» में उछाल का मतलब आम तौर पर यह है कि कोई स्क्रिप्ट आपके कैटलॉग की पुरानी कॉपी से चल रही है।
निचोड़
खुला API कोई छेद नहीं, पैनल के बढ़ने का मुख्य रास्ता है: कुंजी वाला बायर वह हिस्सा लाता है जो हाथ से कभी नहीं जुटेगा, और API इसीलिए बनाया जाता है। बस उसकी हिफ़ाज़त वैसे नहीं होती जैसे किसी वेबसाइट की। सारे नियम सर्वर पर रहते हैं, सारे रास्ते एक ही जाँचों से गुज़रते हैं, सीमाएँ पहले से घोषित होती हैं, बैच मेथड दस्तावेज़ में होते हैं, और कुंजी एक क्लिक में नई हो जाती है। छिपा हुआ बटन कुछ नहीं बचाता, और इसे ठोकर खाकर सीखने से पहले मान लेना सस्ता है। कुंजी किसे और क्यों देनी है, यह रीसेलर के लिए पैनल API लेख में है।
यह किसी ज़िंदा पैनल पर कैसे चलता है, इसे बिना ख़र्च के देखा जा सकता है: हमारे अपने कैटलॉग से जाने वाले ऑर्डर गिने ही नहीं जाते, और बाहरी प्रोवाइडरों पर महीने के पहले 100 ऑर्डर मुफ़्त हैं। कुंजी तुरंत मिल जाती है, यानी अपनी स्क्रिप्ट पहले ही दिन उस पर चलाई जा सकती है।