發表文章

目前顯示的是有「開發概念類-WEAK-Heap Inspection」標籤的文章

自救必看三大準則

Heap Inspection

成因        將敏感性資料(身分證號、密碼)儲存在  String  物件中,無法確實的由記憶體中清除。       因  String  物件為 不可變 ,只能透過程式語言的記憶體回收機制( Garbage Collection,GC )進行清除,但  String  物件即使不再使用,也不一定會馬上會被GC回收,也就是說我們無法確保敏感性資料是被清除,還是仍留在記憶體中。在應用程式意外結束時,應用程式的記憶體傾印即可能洩露敏感性資料;或是透過某些工具,也可以取得應用程式在記憶體中的資料。 解決方法        有一個簡單的方法可以解決問題,就是用  Char[]  取代  String 。但在 .Net 應用程式,提供了  System.Security.SecureString  類別讓我們使用, SecureString  的資料在記憶體中是加密的,且可設為唯讀,避免被修改。我們可用  SecureString  保存 保敏感性資料,以減少機密資料在記憶體中的時間,降低被竊取的風險。      String  與  SecureString  之間的轉換函數如下 private static SecureString getPwdSecurity ( string value ) { SecureString result = new SecureString ( ) ; foreach ( char c in value ) { result . AppendChar ( c ) ; } return result ; } private static string SecureStringToString ( SecureString value ) { IntPtr valuePtr = IntPtr . Zero ; try ...