2013-01-12 5 views
8

yılında hafızasını sıfır ben gibi kullanıcı sağlanan şifre değerini okursanız ki:güvenli, acaba, iOS'ta NSString

NSString* strPwd = UITextField.text; 

//Check 'strPwd' 
... 

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

Sadece hassas veri RAM içinde "sarkan" bırakarak sevmiyorum. Bunu nasıl sıfırlayacağın hakkında bir fikrin var mı?

cevap

9

Temelde gerçekten yapamazsınız. Bu konuda Apple ile dosyalanmış hatalar var. Ek olarak, en az UITextField ve NSString ile ilgili sorunlar vardır.

@Leo Natan tarafından bir anda silindi yanıtında yorumunu yinelemek için:

bayt bellekte sıfır olan dizeyi garanti etmez kapsayan NSString nesnenin serbest bırakılması. Ayrıca, bir cihaz jailbroken, Apple'ın vaat ettiği tüm tüm vaatlerini kullanamaz. Ancak, bu durumda, çalışmasının ortasında tüm çalışma zamanını takas etmek mümkün olduğundan, küçük bir tane yapabilirsiniz, bu bellekten şifresini almak.

Lütfen bunu istemek için başka bir hata daha verin, daha iyi.

Apple Bug Reporter

+0

Vay. Teşekkür ederim. – wolfrevokcats

0

NSString (başka bir yerde belirtilen kapsülleme nedenleriyle) bu yeteneğe sahip olmasa da, bu olmamalıdır çok sert uygulama sadece noktalar şunlardır düzenli eski C-dizeleri, kullanmasını sağlamak için belleğe. İşaretçiye sahip olduğunuzda, işiniz bittiğinde işleri temizlemek oldukça kolaydır.

Bu

kullanıcı tarafından girilen metin alanları ile yardımcı olmaz ( NSString -s kullanmak ve onları değiştiremezsiniz), ama kesinlikle işaretçi tabanlı bellekte tüm uygulamanızın hassas verileri tutabilir.

(Ben güncel bir jailbreak cihazım yok) onunla denediği değil, ama aynı zamanda NSMutableString deneme ilginç olabilir - bir şey gibi:

// 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]; 

NOT: Ben hiçbir bu, eğer istediğini yaparsa; daha önceki cevabımı yazarken düşündüğüm bir şey. şimdi çalışsa bile, uygulamanın kırılgan olduğu (yani: gelecekte kırılmaya tabi) uygulamaya bağlı olduğunu tahmin ediyorum, bu yüzden kullanılmamalıdır.

Yine de ilginç bir egzersiz olabilir!

+0

Bu, özellikle, ObjC çalışma zamanının hemen hemen her şeyi engellemenize izin vermesi kaydıyla, kimsenin “parola” olarak adlandırılmadığını garanti etmeyi imkansız kılar. – Alexander