Android SharedPreference सुरक्षा


118

मुझे साझा प्राथमिकताओं की सुरक्षा के बारे में आश्चर्य है।

क्या यह साझा करने के लिए पहुँच संभव है, भले ही वे MODE_PRIV (0) में बनाए गए हों?
क्या उपलब्ध सभी साझाकरणों को सूचीबद्ध करना संभव है और फिर अन्य ऐप्स से सभी सेटिंग्स प्राप्त करें?
क्या साझा डेटा या संवेदनशील टोकन जैसे संवेदनशील डेटा को साझा करने के लिए साझाकरण अच्छा स्थान है?

धन्यवाद



अच्छे जवाब के साथ, एक नज़र डालें। साझा प्राथमिकताएं डेवलपर की प्रोग्रामिंग शैली के बारे में बहुत कुछ कहती हैं।
विश्व रत्न

जवाबों:


232

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

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

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


2
क्या कोई आधिकारिक दस्तावेज है जो इस बारे में बात करता है? क्या आपके पास कोई संदर्भ है?
CLU

26

SharedPreferences आपके फ़ोन / डेटा / डेटा / फ़ोल्डर में XML फ़ाइलों के अलावा कुछ भी नहीं है, इसलिए रूट किए गए डिवाइस पर सुपरयुसर निजीकरण वाला कोई भी एप्लिकेशन या उपयोगकर्ता आपके SharedPreferences तक पहुंच सकता है, भले ही वे MODE_PRIV के साथ बनाए गए हों

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

https://github.com/sveinungkb/encrypted-userprefs

जैसा कि दूसरों ने कहा कि कोई भी इसे एक्सेस कर सकता है लेकिन इस मामले में कोई भी इसके अंदर डेटा नहीं पढ़ सकता है क्योंकि यह एन्क्रिप्टेड है। इसके secure.For तो परम सुरक्षा मेरी सुझाव रन टाइम के बजाय मुश्किल कोडिंग पर एन्क्रिप्शन के लिए इस्तेमाल कुंजी उत्पन्न करने के लिए किया जाएगा। ऐसा करने के कई तरीके हैं :)


8
तो फिर आप उत्पन्न कुंजी को कैसे बचाते हैं?
ओलायिन्का

3
@ ऑलिंका यह एन्क्रिप्ट करने के लिए सुरक्षित होगा कि अभी तक एक और कुंजी के साथ और इसे एक में सहेजें SharedPref। लेकिन फिर, दूसरी कुंजी के साथ क्या करना है? गंभीरता से, हालांकि, सबसे अच्छा परिदृश्य एन्क्रिप्टेड कुंजी और डिवाइस यूआईडी को एसएसएल का उपयोग करके सर्वर पर भेजा जाएगा ताकि वहां संग्रहीत किया जा सके और आवश्यकतानुसार पुनर्प्राप्त किया जा सके। इसके लिए कनेक्टिविटी की आवश्यकता होगी, लेकिन आपको एक डिवाइस को ब्लैकलिस्ट करने की अनुमति होगी और अचानक सभी डेटा ट्रैश हो जाएंगे। निरंतर इंटरनेट कनेक्शन के बिना, डेटा एन्क्रिप्ट करने की कोई भी कोशिश 100% सुरक्षित नहीं है।
पाउलो अवेलर

मैंने उपरोक्त समाधान का उपयोग किया है ... यह 10 में से 9 बार काम करता है..लेकिन मुझे त्रुटि मिल रही है: 1e06b065: सिफर फ़ंक्शन: EVP_DecryptFinal_ex: BAD_DECRYPT "कई बार..क्या कोई विचार रखता है?
राज त्रिवेदी

3
@PaooAvelar क्रिप्टोग्राफ़िक कुंजियों के दीर्घकालिक संग्रहण और पुनर्प्राप्ति के लिए Android KeyStore का उपयोग करें। कुंजियों को किसी एप्लिकेशन के भीतर संग्रहीत नहीं किया जाता है, इसलिए उन्हें समझौता नहीं किया जा सकता है। बशर्ते पुस्तकालय इसका उपयोग न करें। यह कोड में रहस्य को सहेजता है इस प्रकार यह सुरक्षित नहीं है।
एपेक्स39

13

आम तौर पर, नहीं, वे अन्य एप्लिकेशन द्वारा एक्सेस नहीं किए जा सकते हैं, हालांकि, आपको ध्यान देना चाहिए कि SharedPreferences को /data/data/डायरेक्टरी में XML फ़ाइलों के रूप में संग्रहीत किया गया है , जिसका अनिवार्य रूप से अर्थ है कि रूट किए गए डिवाइस पर सुपरसुसर विशेषाधिकारों वाला कोई भी एप्लिकेशन आपके s तक पहुंच सकता है , भले ही वे के साथ बनायाSharedPreferenceMODE_PRIV


3

क्या यह साझा करने के लिए पहुँच संभव है, भले ही वे MODE_PRIV (0) में बनाए गए हों?

यदि आप सुपर उपयोगकर्ता विशेषाधिकार प्राप्त करते हैं तो कोड संख्या के अनुसार लेकिन आप आवेदन फ़ाइल को पुनः प्राप्त कर सकते हैं।

क्या उपलब्ध सभी साझाकरणों को सूचीबद्ध करना संभव है और फिर अन्य ऐप्स से सभी सेटिंग्स प्राप्त करें?

यदि आप सुपर यूजर (रूटेड डिवाइस) हैं तो आप ऐप की सभी निजी फाइलों को खींच सकते हैं।

क्या साझा डेटा या संवेदनशील टोकन जैसे संवेदनशील डेटा को साझा करने के लिए साझाकरण अच्छा स्थान है?

नहीं। इसे आसानी से हैक किया जा सकता है। यदि आप किसी संवेदनशील डेटा को साझा प्रीफ्रेंस फ़ाइल में रखना चाहते हैं तो आप डेटा और स्टोर को एन्क्रिप्ट कर सकते हैं। आप एनडीके / सर्वर में अपनी एन्क्रिप्शन कुंजी स्टोर कर सकते हैं।


इसे आसानी से कैसे हैक किया जा सकता है?
जॉन सरदिन्हा

हाँ प्रश्न फार्म @ जो
Cuong Vo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.