rest - आरईएसटी प्रमाणीकरण योजनाओं की सुरक्षा
authentication oauth (4)
असल में, मूल एस 3 ऑथ सामग्री को कमजोर एमडी 5 हस्ताक्षर के बावजूद हस्ताक्षर करने की इजाजत देता है। आप एचएमएसी (हस्ताक्षर किए जाने के लिए स्ट्रिंग) में सामग्री-एमडी 5 हेडर सहित अपने वैकल्पिक अभ्यास को आसानी से लागू कर सकते हैं।
http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html
उनकी नई वी 4 प्रमाणीकरण योजना अधिक सुरक्षित है।
http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html
पृष्ठभूमि:
मैं एक आरईएसटी वेब सेवा के लिए प्रमाणीकरण योजना तैयार कर रहा हूं। यह "वास्तव में" सुरक्षित होने की आवश्यकता नहीं है (यह एक निजी परियोजना है) लेकिन मैं इसे व्यायाम / सीखने के अनुभव के रूप में यथासंभव सुरक्षित बनाना चाहता हूं। मैं एसएसएल का उपयोग नहीं करना चाहता क्योंकि मैं परेशानी नहीं चाहता हूं, ज्यादातर, इसे स्थापित करने की कीमत।
ये SO प्रश्न मुझे शुरू करने के लिए विशेष रूप से उपयोगी थे:
- विश्वसनीय प्रमाणीकरण
- एक आरईएसटी एपीआई / वेब सेवा को सुरक्षित करने के लिए सर्वोत्तम अभ्यास
- सर्वश्रेष्ठ एसओएपी / आरईएसटी / आरपीसी वेब एपीआई के उदाहरण? और आप उन्हें क्यों पसंद करते हैं? और उनके साथ क्या गलत है?
मैं अमेज़ॅन एस 3 के प्रमाणीकरण के सरलीकृत संस्करण का उपयोग करने के बारे में सोच रहा हूं (मुझे OAuth पसंद है लेकिन यह मेरी ज़रूरतों के लिए बहुत जटिल लगता है)। मैं रीप्ले हमलों को रोकने के लिए अनुरोध से सर्वर द्वारा आपूर्ति की गई यादृच्छिक रूप से उत्पन्न nonce जोड़ रहा हूं।
प्रश्न प्राप्त करने के लिए:
एस 3 और ओएथ दोनों कुछ चयनित शीर्षकों के साथ अनुरोध यूआरएल पर हस्ताक्षर करने पर भरोसा करते हैं। उनमें से कोई भी POST या PUT अनुरोधों के लिए अनुरोध निकाय पर हस्ताक्षर नहीं करता है। क्या यह मानव-में-मध्य-मध्य हमले के लिए कमजोर नहीं है, जो यूआरएल और हेडर रखता है और हमलावर चाहता है कि किसी भी डेटा के साथ अनुरोध निकाय को बदल देता है?
ऐसा लगता है कि मैं हस्ताक्षरित होने वाली स्ट्रिंग में अनुरोध निकाय के हैश को शामिल करके इसके खिलाफ सुरक्षा कर सकता हूं। क्या यह सुरक्षित है?
आरईएसटी का मतलब है वेब के मानकों के साथ काम करना, और वेब पर "सुरक्षित" स्थानांतरण के लिए मानक एसएसएल है। और कुछ भी बहुत ही मज़ेदार होने जा रहा है और ग्राहकों के लिए अतिरिक्त तैनाती के प्रयास की आवश्यकता है, जिसमें एन्क्रिप्शन पुस्तकालय उपलब्ध होंगे।
एक बार जब आप एसएसएल के लिए प्रतिबद्ध हो जाते हैं, सिद्धांत में प्रमाणीकरण के लिए वास्तव में कुछ भी आवश्यक नहीं है। आप फिर से वेब मानकों के साथ जा सकते हैं और HTTP बेसिक ऑथ (प्रत्येक अनुरोध के साथ भेजे गए उपयोगकर्ता नाम और गुप्त टोकन) का उपयोग कर सकते हैं क्योंकि यह एक विस्तृत हस्ताक्षर प्रोटोकॉल से कहीं अधिक सरल है, और अभी भी एक सुरक्षित कनेक्शन के संदर्भ में प्रभावी है। आपको बस यह सुनिश्चित करने की ज़रूरत है कि पासवर्ड सादे पाठ पर कभी नहीं चला जाता; इसलिए यदि पासवर्ड कभी सादे पाठ कनेक्शन पर प्राप्त होता है, तो आप पासवर्ड को अक्षम भी कर सकते हैं और डेवलपर को मेल कर सकते हैं। आपको यह भी सुनिश्चित करना चाहिए कि रसीद पर कहीं भी क्रेडेंशियल्स लॉग इन नहीं हैं, जैसे आप नियमित पासवर्ड लॉग नहीं करेंगे।
HTTP डाइजेस्ट एक सुरक्षित दृष्टिकोण है क्योंकि यह गुप्त टोकन को पारित होने से रोकता है; इसके बजाए, यह एक हैश सर्वर दूसरे छोर पर सत्यापित कर सकता है। यद्यपि ऊपर उल्लिखित सावधानी बरतने पर यह कम संवेदनशील अनुप्रयोगों के लिए अधिक हो सकता है। आखिरकार, जब उपयोगकर्ता लॉग इन करते हैं तो उपयोगकर्ता का पासवर्ड सादा-पाठ में पहले से प्रसारित होता है (जब तक कि आप ब्राउज़र में कुछ फैंसी जावास्क्रिप्ट एन्क्रिप्शन नहीं कर रहे हों), और इसी तरह प्रत्येक अनुरोध पर उनकी कुकीज़ भी।
ध्यान दें कि एपीआई के साथ, ग्राहक के लिए टोकन पास करने के लिए बेहतर है - यादृच्छिक रूप से जेनरेट किए गए तार - पासवर्ड के बजाय डेवलपर वेबसाइट में लॉग इन करता है। इसलिए डेवलपर आपकी साइट में लॉग इन करने और नए टोकन जेनरेट करने में सक्षम होना चाहिए जिसका उपयोग एपीआई सत्यापन के लिए किया जा सकता है।
टोकन का उपयोग करने का मुख्य कारण यह है कि अगर इसे समझौता किया गया है तो इसे प्रतिस्थापित किया जा सकता है, जबकि यदि पासवर्ड से समझौता किया गया है, तो मालिक डेवलपर के खाते में लॉग इन कर सकता है और जो भी चाहें वह कर सकता है। टोकन का एक और फायदा यह है कि आप एक ही डेवलपर्स को एकाधिक टोकन जारी कर सकते हैं। शायद क्योंकि उनके पास एकाधिक ऐप्स हैं या क्योंकि वे विभिन्न एक्सेस स्तरों के साथ टोकन चाहते हैं।
(केवल एसएसएल कनेक्शन बनाने के प्रभाव को कवर करने के लिए अपडेट किया गया।)
यदि आपको यूआरएल में पैरामीटर में से एक के रूप में शरीर के हैश की आवश्यकता होती है और उस यूआरएल को एक निजी कुंजी के माध्यम से हस्ताक्षरित किया जाता है, तो एक मैन-इन-द-बीच हमला केवल उस सामग्री के साथ शरीर को प्रतिस्थापित करने में सक्षम होगा जो उत्पन्न करेगा एक ही हैश अब कम से कम MD5 हैश मानों के साथ करना आसान है और जब SHA-1 टूटा हुआ है, तो, आपको तस्वीर मिलती है।
शरीर को छेड़छाड़ से सुरक्षित करने के लिए, आपको शरीर के हस्ताक्षर की आवश्यकता होगी, जिसमें एक मध्यम-बीच-मध्य हमले तोड़ने में सक्षम होने की संभावना कम होगी क्योंकि वे हस्ताक्षर उत्पन्न करने वाली निजी कुंजी नहीं जान पाएंगे ।
या आप इस समस्या के ज्ञात समाधान का उपयोग कर सकते हैं और एसएसएल का उपयोग कर सकते हैं। स्व-हस्ताक्षरित certs निःशुल्क हैं और यह एक निजी परियोजना सही है?