iOS安全攻防(十三):数据擦除

数据擦除


原文地址:http://blog.csdn.net/yiyaaixuexi/article/details/18669201


对于敏感数据,我们不希望长时间放在内存中,而希望使用完后立即就被释放掉。
但是不管是ARC还是MRC,自动释放池也有轮循工作周期,我们都无法控制内存数据被擦除的准确时间,让hackers们有机可乘。
本文介绍一个小技巧——及时数据擦除。


假如一个View Controller A的一个数据被绑在一个property上,

  1. @interface WipingMemoryViewController : UIViewController  
  2.   
  3. @property (nonatomic,copyNSString *text;  
  4. @end  

当A push到 另外一个View Controller B时,该数据还是有可能被读到的

  1. WipingMemoryViewController *lastController = (WipingMemoryViewController *)self.navigationController.viewControllers[0];  
  2. NSLog(@"text = %@",lastController.text);  


于是,“用后即擦”变得十分必要:

  1. _text = [[NSString alloc]initWithFormat:@"information"];   
  2. NSLog(@"Origal string = %@",_text);  
  3. //do something...  
  4. charchar *string = (charchar *)CFStringGetCStringPtr((CFStringRef)_text, CFStringGetSystemEncoding());  
  5. memset(string, 0, [_text length]);  
  6. NSLog(@"final text = %@",_text);  

Log输出如下:

  1. WipingMemory[2518:70b] Origal string = information  
  2. WipingMemory[2518:70b] final text =   

可以看到,我们想要保护的数据,被有效的擦除了。


还有提个醒,如果是这样

  1. _text = @"information";  


创建的字符串,是会被分配到data区,而是无法修改的。




如果有兴趣也有闲心,可以试试运行下面的代码,有彩蛋哦:

  1. _text = @"information";  
  2. memset((__bridge voidvoid *)(_text), 0, _text.length - 1);  
  3. NSString *myString = [[NSString alloc]initWithFormat:@"information"];  
  4. NSLog(@"Origal text : %@ \n",myString);  

编译器把两个information的省略到一个地址了~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值