2011-02-24 72 views
1

我的應用臨時存儲了大量敏感數據,我想再次覆蓋內存中的數據。iPhone NSString用零覆蓋敏感數據

我發現一個帖子較早的提示是:

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

所以我想知道是否有任何的方式來定位存儲在內存中的對象內的敏感數據,並找出其長度和覆蓋內存(不管多麼複雜)?

+0

你的意思是'敏感'嗎? – 2011-02-24 20:59:21

+0

是的。謝謝您的幫助。更正了帖子。 – hol 2011-02-24 21:03:09

+3

如果可以從內存中讀取敏感數據,那麼什麼是安全的?似乎有點沒用,只需在完成時釋放字符串。 – 2011-02-24 21:04:41

回答

3

有太多的未知因素使得這樣的努力值得。你不知道路由數據已經採取之前,它找到你,並且其中副本已經留在內存中,但沒有擦洗,等等。

如果你在去年關於iPhone安全的任何新聞,你會發現這是一個非常糟糕的代表 - 非常有缺陷的加密,糟糕的事情發生像鍵盤數據可能被長期保留等等。如果我是你,我不會感到煩惱!

顯然,寫入磁盤的數據是另一回事,值得考慮。底線:真的,真正敏感的重要數據可能不應該靠近iPhone(也可能是其他一些智能設備啓動)。

1

如果您要加密存儲在堆上的任何數據,該怎麼辦?因此,無論何時您將某些東西存儲到變量或數據結構中,都可以通過密碼傳遞它。然後,只要你想使用它,就解密它。

節省您嘗試擦拭任何東西的麻煩。即使他們能夠獲取數據,如果他們不知道您的加密短語/密鑰/方法,那麼他們也無法讀取它。