2009-10-13 14 views
16

ऐप्पल आपकी सभी ऐप वरीयताओं को स्टोर करने के लिए NSUserDefaults का उपयोग करने की सलाह देता है। हालांकि, ऐसा लगता है कि NSUserDefaults बहुत आसानी से संपादन योग्य है। क्या इसे सुरक्षित करने का कोई तरीका है। मैं इसे संपादित करना असंभव बनाने का कोई तरीका नहीं ढूंढ रहा हूं, बस इसे कठिन बना रहा हूं ताकि उपयोगकर्ता अनुप्रयोगों को आंतरिक चर बदलने के लिए इतने मोहक न हों।NSUserDefaults को कैसे सुरक्षित करें?

उत्तर

-1

आईफोन के लिए? वे इन चरों को परिवर्तित नहीं कर सकते हैं, इसे बदलने के लिए कोई टर्मिनल.एप नहीं है (जेलब्रोकन डिवाइस को छोड़कर, लेकिन यह ऐप्पल के लिए एक समस्या है, आपके लिए नहीं)। डेस्कटॉप ऐप्स के लिए, आप NSData का उपयोग करके इसे एन्कोड कर सकते हैं, और उन्हें बेस 64 के रूप में संग्रहीत किया जाएगा।

+0

मैं जेलब्रोकन उपकरणों से चिंतित हूं। – erotsppa

+0

"यह ऐप्पल के लिए एक समस्या है, आपके लिए नहीं" मुझे लगता है कि यह वैध नहीं है। यदि आपका ऐप कुछ मूल्यवान स्टोर करता है, तो इससे पहले कि कोई व्यक्ति एक कीड़े/वायरस बनाता है जो जेलब्रोकन फोन को लक्षित करता है और उस डेटा को स्कूप्स करता है और उसे घर भेजता है। – AlBeebe

+0

यदि आपको कुछ संवेदनशील स्टोर करने की आवश्यकता है, तो NSUserDefaults नहीं, Keychain का उपयोग करें। –

0

ईमानदार होने के लिए, यह एक गैर-ऊतक जैसा लगता है जब तक कि आप NSUserDefaults में कुछ स्टोर नहीं करना चाहते हैं जिसे उपयोगकर्ता से गुप्त रखा जाना चाहिए। उपयोगकर्ता वास्तव में उनकी वरीयताओं में नहीं जाते हैं और उन्हें सीधे संपादित नहीं करते हैं, जब तक कि वहां कुछ छिपा हुआ न हो जिसे यूआई के माध्यम से बदला नहीं जा सकता (जैसे छिपी प्राथमिकताओं कि ऐप्पल आपको बदलने के लिए यूआई नहीं देता है, लेकिन वास्तविक है स्थिर, उपयोगी प्रभाव अगर बदल गया)।

4

आप आईफोन कीचेन में वास्तव में सुरक्षित डेटा स्टोर कर सकते हैं। इसके विकल्प आपके स्वयं के एन्क्रिप्शन क्लासेस (एप्लिकेशन वितरण को सीमित कर सकते हैं), या किसी अन्य एन्कोडिंग जैसे nsdata, base64, आदि के माध्यम से obfuscation

4

NSUserDefaults में केवल उन्हीं सेटिंग होनी चाहिए जिन्हें आप अपने उपयोगकर्ता को बदलने में सक्षम होना चाहते हैं। ऐप आंतरिक डेटा NSUserDefaults में नहीं होना चाहिए। अपने आंतरिक डेटा को NSDictionary में सहेजें और इसे अपने ऐप्स दस्तावेज़ों या tmp फ़ोल्डर में एक अलग फ़ाइल में लिखें।

NSDictionary* dict = [NSDictionary dictionaryWithObjects:objs forKeys:keys]; 
BOOL succeeded = [dict writeToFile:[self dbFullPathName] atomically:YES]; 
2

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

9

मैंने बिल्कुल उस उद्देश्य के लिए उपयोग करने के लिए एक सरल और छोटी श्रेणी लिखी। आईफोन और मैक ओएस एक्स पर काम करता है, यह मुफ़्त है और एमआईटी लाइसेंस के तहत है। आप इसे github पर पा सकते हैं: SecureUserDefaults

+2

यह मेरे ऐप – OMGPOP

+0

@OMGPOP बड़े प्रशंसक पर क्रैश हो गया है :) –

22

यदि डेटा का एक टुकड़ा संवेदनशील नहीं है (उदा।, डिफ़ॉल्ट फ़ॉन्ट आकार), इसे NSUserDefaults में संग्रहीत करें।

यदि इसे आरामदायक स्नूपिंग (उदाहरण के लिए, उपयोगकर्ता का पासवर्ड) से सुरक्षित होना आवश्यक है, तो इसे कीचेन में स्टोर करें।

यदि उपयोगकर्ता (जैसे पंजीकरण कोड) से सुरक्षित होना आवश्यक है, तो आपको अपनी खुद की एन्क्रिप्शन रोल करने की आवश्यकता होगी, फिर जहां भी आप चाहें डेटा स्टोर करें।

+0

कीचेन अनइंस्टॉल करने से परे मूल्यों को जारी रखेगा। इसका उपयोग करते समय ध्यान में रखें – xximjasonxx

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