我的应用程序临时存储了大量敏感数据,我想再次覆盖内存中的数据。
我早些时候发现了一篇文章,建议这样做:
char* block = malloc(200);
NSString* string = [[NSString alloc] initWithBytesNoCopy:length:encoding:freeWhenDone];
//use string
memset(block, 0, 200);// overwrite block with 0
[string release];
free(block);但这对我不起作用。因为我用很多不同的方式收集数据。例如:
mySensibleString = [anotherString substringWithRange:NSMakeRange(5,15)];或者甚至通过HTTPS连接获得它:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// Append the new data to receivedData.
// receivedData is an instance variable declared elsewhere.
[receivedData appendData:data];
}因此,我想知道是否有任何方法可以在内存中定位存储在对象中的敏感数据,并找出其长度并覆盖该内存(无论有多复杂)?
发布于 2011-02-25 05:13:38
有太多的未知因素让这样的努力值得一试。在数据到达你之前,你不知道它走了哪条路,也不知道它的副本留在了内存中,但没有被清除,等等。
如果你在去年关注了任何关于iPhone安全的新闻,你会发现这是一个非常糟糕的时刻--非常有缺陷的加密,发生了像键盘数据可能被保留很长很长时间这样的糟糕事情,等等。如果我是你,我不会费心!
显然,将数据写入磁盘是另一回事,值得考虑。
结论:非常非常敏感的重要数据可能不应该放在iPhone (也许还有其他一些需要启动的智能设备)附近。
发布于 2011-02-25 05:24:02
如果要加密存储在堆上的任何数据,情况会怎样?所以,任何时候,当你将一些东西存储到一个变量或一个数据结构中时,通过一个密码传递它。然后,当你想使用它的时候,只要解密它即可。
省去了你想要擦掉任何东西的麻烦。即使他们能拿到数据,如果他们不知道你的加密密码/密钥/方法,他们也无法读取。
https://stackoverflow.com/questions/5110339
复制相似问题