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