數據擦除
對於敏感數據,我們不希望長時間放在內存中,而希望使用完後立即就被釋放掉。
但是不管是ARC還是MRC,自動釋放池也有輪循工作周期,我們都無法控制內存數據被擦除的准確時間,讓hackers們有機可乘。
本文介紹一個小技巧——及時數據擦除。
假如一個View Controller A的一個數據被綁在一個property上,
@interface WipingMemoryViewController : UIViewController @property (nonatomic,copy) NSString *text; @end
WipingMemoryViewController *lastController = (WipingMemoryViewController *)self.navigationController.viewControllers[0]; NSLog(@"text = %@",lastController.text);
於是,“用後即擦”變得十分必要:
_text = [[NSString alloc]initWithFormat:@"information"]; NSLog(@"Origal string = %@",_text); //do something... char *string = (char *)CFStringGetCStringPtr((CFStringRef)_text, CFStringGetSystemEncoding()); memset(string, 0, [_text length]); NSLog(@"final text = %@",_text);
WipingMemory[2518:70b] Origal string = information WipingMemory[2518:70b] final text =
可以看到,我們想要保護的數據,被有效的擦除了。
還有提個醒,如果是這樣
_text = @"information";
_text = @"information"; memset((__bridge void *)(_text), 0, _text.length - 1); NSString *myString = [[NSString alloc]initWithFormat:@"information"]; NSLog(@"Origal text : %@ \n",myString);