我想提出一個WPF應用程序將處理大量的例如用戶名,密碼,電子郵件等,所有這些數據都顯示在應用文本框和passwordboxes敏感數據。當應用程序關閉時,我需要刪除內存中的所有數據,以便以後再檢索它。安全問題在WPF應用程序
你能告訴我什麼,我需要注意的是,或技術,我可以使用,使這個項目儘可能安全的一些準則或建議嗎?
謝謝
我想提出一個WPF應用程序將處理大量的例如用戶名,密碼,電子郵件等,所有這些數據都顯示在應用文本框和passwordboxes敏感數據。當應用程序關閉時,我需要刪除內存中的所有數據,以便以後再檢索它。安全問題在WPF應用程序
你能告訴我什麼,我需要注意的是,或技術,我可以使用,使這個項目儘可能安全的一些準則或建議嗎?
謝謝
這些數據將不會保留在內存中的程序執行結束後,但在理論上它可以在程序運行時讀取。你可以嘗試使用SecureString
S:http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx
此外,PasswordBox
控制已經使用SecureString
,使你在那一部分好。
.net字符串是不可變的,並且被實現。 不可變性使字符串在創建後不可更改。 實習使CLR使用具有相同內容的字符串的一個實例。 這也讓它更難擺脫一個字符串。
從MSDN
..分配給拘留String對象的內存不是有可能被 釋放,直到公共語言運行庫(CLR)終止。 的原因是CLR對實體化字符串對象的引用在您的應用程序或您的應用程序域 終止後可能會持續存在 。
你可以使用SecureString,但它不是很方便,因爲沒有太多的WPF控件支持PasswordBox。
例如有些時候,你必須表明用戶的密碼,而無需轉換SecureString的回一個正常的字符串,這是不可能的。這帶來了我們制定的緩解問題。
所以,在我看來,WPF/C#不會對敏感數據的應用提供了良好的候選語言的框架。
請解釋您爲什麼downvoted。這樣每個人都會學到一些東西。 – Indy9000 2013-09-06 09:35:41
我認爲你在擔心一些不值得擔心的事情。
如果有人對機器的物理訪問,並希望竊取敏感信息,你已經輸掉了比賽。
雖然用戶名和密碼可能不是當前在內存中,人可以只安裝一個鍵盤記錄器,並把它下一次運行應用程序。
數據是如何進入內存的?當可執行文件結束時,其內存將被釋放。你有剪貼板中的數據嗎?你是否將內存寫入磁盤?你擔心關鍵捕獲嗎?或者你有什麼擔心? – 2012-03-06 15:41:45
我正在用計時器清除剪貼板,並且沒有數據寫入磁盤,這不是一個問題。但是我已經在某處看到,存在於文本框中的數據可以保留在內存中。 – Aaron 2012-03-06 15:43:44
@mitte:僅在應用程序運行期間... – 2012-03-06 15:44:39