對象在處理時會發生什麼?難道所有的記憶都消失了嗎?或者痕跡仍然存在?iOS設備上的ObjC對象的安全釋放
如果我理解正確的話,應用程序的內存被保存,如果它主動辭職到閃存存儲。假設一個能夠讀出這個內存的資源豐富的黑客。如果該記憶沒有被某些東西覆蓋,他理論上有時能夠讀出已處理的NSString
的內容嗎?
對象在處理時會發生什麼?難道所有的記憶都消失了嗎?或者痕跡仍然存在?iOS設備上的ObjC對象的安全釋放
如果我理解正確的話,應用程序的內存被保存,如果它主動辭職到閃存存儲。假設一個能夠讀出這個內存的資源豐富的黑客。如果該記憶沒有被某些東西覆蓋,他理論上有時能夠讀出已處理的NSString
的內容嗎?
不要將安全數據存儲在Objective C數據類型中。它們是不透明的數據類型,每次嘗試清除某些部分時,都可能在內存中製作和/或留下大量數據副本。
加了:相同的似乎是約夫特數據類型,包括結構,數組和字符串真。它們是不透明的,因此誰知道DRAM中可能會留下多少數據副本。
使用非不透明純C數據類型(陣列的字符,等等),它可以,只要你正在使用完bzero,每當應用程序被辭職活性。您還可以混淆數組元素,以便通過內存轉儲進行字符串搜索更加困難。
即使有一個越獄的iDevice,這將是不可能的,因爲在內存中的位置可能是如此之深。如果你真的關心的是,這裏是一個解決方案,如果你不擔心的NSMutableString(你的類的dealloc)的開銷:
-(void) dealloc
{
for (int i = 0; i < [myString length]; i++)
{
[myString replaceCharactersInRange:NSMakeRange(i, 1) withString:@"*"];
}
[myString release]; // or dealloc
// clean up rest
[super dealloc]; // dont forget this :)
}
我不認爲不太可能,可能是不夠好,如果應用程序的承諾,提供最大的安全性,因此,如果它在所有可能獲得這樣的dealloced數據,我會去這樣一個解決方案。謝謝,我有點期待不得不走這條路。 – user362178 2010-11-03 15:03:17
所以,你也提出了這個問題有關注銷閃存。如果您的應用進入後臺,它將而不是必然釋放對象 - 並給您擦除它們的機會(如其他答案中所述)。
,如果你真的關心這個 - 我對你的應用程序禁用快速切換應用程序,以確保這不會發生,除執行上的dealloc某種物體過度擦除碼,如上所述。
感謝您提供關於如何處理應用切換的建議。我將不得不研究應用程序失去活動狀態的不同方式,並考慮到這一點。 – user362178 2010-11-03 15:06:25
非常好的點 – user362178 2010-11-03 17:00:16
對於如何降低UITextField對象(將secureTextEntry屬性設置爲Yes)的風險,您可以在將輸入內容放入C數組之前將內容保留在內存中嗎? – user362178 2010-11-03 17:06:12
也許最好重寫 - textField:shouldChangeCharactersInRange:replacementString:並不是將實際的字符串存儲在不透明的UITextField對象中,而是手動修改C數組?我不確定如何仍然允許最後輸入的字符顯示,但也許我可以爲此做些工作。 – user362178 2010-11-03 17:11:55