2012-03-06 131 views
2

我想提出一個WPF應用程序將處理大量的例如用戶名,密碼,電子郵件等,所有這些數據都顯示在應用文本框和passwordboxes敏感數據。當應用程序關閉時,我需要刪除內存中的所有數據,以便以後再檢索它。安全問題在WPF應用程序

你能告訴我什麼,我需要注意的是,或技術,我可以使用,使這個項目儘可能安全的一些準則或建議嗎?

謝謝

+0

數據是如何進入內存的?當可執行文件結束時,其內存將被釋放。你有剪貼板中的數據嗎?你是否將內存寫入磁盤?你擔心關鍵捕獲嗎?或者你有什麼擔心? – 2012-03-06 15:41:45

+0

我正在用計時器清除剪貼板,並且沒有數據寫入磁盤,這不是一個問題。但是我已經在某處看到,存在於文本框中的數據可以保留在內存中。 – Aaron 2012-03-06 15:43:44

+1

@mitte:僅在應用程序運行期間... – 2012-03-06 15:44:39

回答

-1

.net字符串是不可變的,並且被實現。 不可變性使字符串在創建後不可更改。 實習使CLR使用具有相同內容的字符串的一個實例。 這也讓它更難擺脫一個字符串。

MSDN

..分配給拘留String對象的內存不是有可能被 釋放,直到公共語言運行庫(CLR)終止。 的原因是CLR對實體化字符串對象的引用在您的應用程序或您的應用程序域 終止後可能會持續存在 。

你可以使用SecureString,但它不是很方便,因爲沒有太多的WPF控件支持PasswordBox。

例如有些時候,你必須表明用戶的密碼,而無需轉換SecureString的回一個正常的字符串,這是不可能的。這帶來了我們制定的緩解問題。

所以,在我看來,WPF/C#不會對敏感數據的應用提供了良好的候選語言的框架。

+0

請解釋您爲什麼downvoted。這樣每個人都會學到一些東西。 – Indy9000 2013-09-06 09:35:41

1

我認爲你在擔心一些不值得擔心的事情。

如果有人對機器的物理訪問,並希望竊取敏感信息,你已經輸掉了比賽。

雖然用戶名和密碼可能不是當前在內存中,人可以只安裝一個鍵盤記錄器,並把它下一次運行應用程序。