2013-01-12 14 views
8

में स्मृति शून्य, मैं सोच रहा था, का कहना है कि अगर मैं इस तरह के रूप उपयोगकर्ता प्रदान की पासवर्ड मूल्य पढ़ें:सुरक्षित रूप से बाहर iOS पर NSString

NSString* strPwd = UITextField.text; 

//Check 'strPwd' 
... 

//How to clear out 'strPwd' from RAM? 

मैं बस छोड़ने के संवेदनशील डेटा "झूलते" रैम में पसंद नहीं है। कोई विचार यह कैसे शून्य करने के लिए?

उत्तर

9

असल में आप वास्तव में नहीं कर सकते हैं। इस सटीक मुद्दे पर ऐप्पल के साथ दायर की गई बग हैं। इसके अतिरिक्त कम से कम UITextField और NSString के साथ समस्याएं हैं।

@Leo नतन से एक अब नष्ट कर दिया जवाब में टिप्पणी दोहराना करने के लिए:

संलग्नित NSString वस्तु जारी स्ट्रिंग बाइट्स स्मृति में शून्य कर रहे हैं गारंटी नहीं है। इसके अलावा, यदि कोई डिवाइस जेलब्रोकन है, तो सभी ऐप्पल वादे सैंडबॉक्सिंग का कोई उपयोग नहीं होगा। हालांकि, इस मामले में, वहां कोई भी ऐसा नहीं कर सकता है, क्योंकि पूरे रनटाइम को चलने वाले एप्लिकेशन के बीच में स्वैप करना संभव है, यह स्मृति से पासवर्ड प्राप्त कर रहा है।

सेब इस अनुरोध के साथ एक और बग की रिपोर्ट दर्ज करें, और अधिक बेहतर है।

Apple Bug Reporter

+0

वाह। धन्यवाद। – wolfrevokcats

0

NSString इस क्षमता (कहीं उल्लेख कैप्सूलीकरण के कारणों के लिए) नहीं है है, ऐसा नहीं होना चाहिए भी कठिन अपने अनुप्रयोग नियमित पुराने सी-तार, जो सिर्फ संकेत दिए गए हैं का उपयोग करने के लिए स्मृति के लिए एक बार आपके पास पॉइंटर होने के बाद, जब आप पूरा कर लें तो चीजों को साफ़ करना काफी आसान है।

यह उपयोगकर्ता के प्रवेश किया पाठ क्षेत्रों के साथ मदद मिलेगी नहीं (जो NSString -s का उपयोग करें और हम उन्हें बदल नहीं सकते हैं), लेकिन आप निश्चित रूप से सूचक आधारित स्मृति में के सभी को अपने ऐप्लिकेशन के संवेदनशील डेटा रख सकते हैं।

मैं (मैं एक वर्तमान जेलब्रेक डिवाइस नहीं है) यह साथ प्रयोग किया है नहीं, लेकिन यह भी NSMutableString के साथ प्रयोग करने के लिए दिलचस्प हो सकता है - कुछ की तरह: कोई मेरे पास है:

// Code typed in browser; may need adjusting 
// keep "password" in an NSMutableString 
NSInteger passLength = password.length; 
NSString *dummy = @"-"; 
while (dummy.length < passLength) 
{ 
    dummy = [dummy stringByAppendingString: @"-"]; 
} 

NSRange fullPass = NSMakeRange(0, passLength); 
[password replaceOccurancesOfString: password 
         withString: dummy 
          options: 0 
           range: fullPass]; 

नोट विचार अगर यह वही करता है जो आप चाहते हैं; यह मेरा कुछ जवाब टाइप करते समय मैंने सोचा था। यहां तक ​​कि अगर यह काम करता है अब, मुझे लगता है कि यह कार्यान्वयन पर निर्भर करता है, जो नाजुक है (अर्थ: भविष्य में तोड़ने के अधीन), इसलिए इसका उपयोग नहीं किया जाना चाहिए।

फिर भी, एक दिलचस्प अभ्यास हो सकता है! :)

+0

यह आवश्यक है कि कोई अन्य उपनाम 'पासवर्ड', जो गारंटी देना असंभव है, विशेष रूप से यह देखते हुए कि ओबीजेसी रनटाइम आपको बहुत कुछ सब कुछ रोक सकता है – Alexander

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