2012-03-22 18 views
17

हम एक मोबाइल ऐप बना रहे हैं और यह सुनिश्चित करने के लिए कि किसी एपीआई को केवल हमारे ऐप द्वारा एक्सेस किया जा रहा है, कुछ प्रकार के प्रमाणीकरण को कार्यान्वित करना चाहते हैं। ऐप के उपयोगकर्ता अज्ञात हैं, बिना लॉग इन के, हालांकि मैं सेटिंग आईडी को बनाए रखने के लिए डिवाइस आईडी के माध्यम से उन्हें पहचानता हूं।यह सुनिश्चित करने के लिए कि हमारे मोबाइल (आईओएस/एंड्रॉइड) ऐप से एपीआई अनुरोध आते हैं?

सबसे आसान तरीका एक GUID/API कुंजी उत्पन्न करना प्रतीत होता है जिसे मैं SSL पर प्रत्येक अनुरोध के साथ भेजता हूं।

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

एसएसएल, एक एपीआई कुंजी, एक डिवाइस आईडी, और एक एपीआई जितना संभव हो उतना आसान कॉल के साथ पर्याप्त है? क्या मुझे एक अलग दृष्टिकोण लेना चाहिए? क्या मेरे डर की स्थापना या आधारहीन हैं?

उत्तर

18

ऐप में एक ही एपीआई कुंजी एम्बेड न करें। आपकी चिंताओं दुर्भावनापूर्ण उपयोगकर्ताओं के प्रभाव के संबंध में मान्य हैं। साथ ही, आपके वर्तमान सेटअप में गंभीर भेद्यता है जहां आप नकली यूडीआईडी ​​प्रदान करके एक दुर्भावनापूर्ण API उपयोगकर्ता अन्य उपयोगकर्ता की वरीयताओं को बदल सकते हैं।

इसके बजाय, "पंजीकरण" सेवा बनाएं जिसे डिवाइस पर पहली बार ऐप स्टार्टअप पर बुलाया जाता है जो यूडीआईडी ​​के आधार पर एक GUID उत्पन्न करता है और देता है। GUID को अपने डिवाइस में स्थानीय उपयोगकर्ता वरीयताओं और सर्वर पर स्टोर करें। GUID का ट्रैक रखें और अपने सर्वर पर प्रत्येक अनुरोध पर यूडीआईडी ​​के साथ मिलें।

सुनिश्चित करें कि यह सब एसएसएल पर होता है।

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

यहां तक ​​कि बेहतर और अधिक स्थापित प्रमाणीकरण तंत्र भी हैं जो बेहतर दृष्टिकोण लेते हैं, यानी। OAuth, JSessionIDs, आदि कि आपको एक नज़र रखना चाहिए।

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

+0

मुझे समझ में नहीं आता कि इससे कुछ और सुरक्षित कैसे हो जाता है। भेद्यता का मुद्दा आपके मामले में केवल अलग है: पंजीकरण सेवा। मैं उस पर हमला कर सकता हूं और मेरे पास भी पूर्ण पहुंच है। मुझे लगता है कि एंड्रॉइड के लिए कम से कम ऐसा कुछ करना संभव है: http://android-developers.blogspot.de/2013/01/verifying-back-end-calls-from-android.html – therealmarv

+0

आप कैसे हमला करेंगे पूर्ण पहुंच प्राप्त करने के लिए पंजीकरण सेवा? –

संबंधित मुद्दे