在使用記住我功能(用於用戶名和密碼憑證)時,我注意到可以恢復在將UseSystemPasswordChar屬性設置爲true時隱藏的密碼。下面的截圖實例:擴展TextBox的UseSystemPasswordChar安全
我也注意到,雖然有很多的應用程序相同的問題遭受不是所有的事,所以我認爲必須有避免這種情況的一種方式。
問題是,我需要採取什麼方法來確保無法使用此方法檢索證書?
在此先感謝。
在使用記住我功能(用於用戶名和密碼憑證)時,我注意到可以恢復在將UseSystemPasswordChar屬性設置爲true時隱藏的密碼。下面的截圖實例:擴展TextBox的UseSystemPasswordChar安全
我也注意到,雖然有很多的應用程序相同的問題遭受不是所有的事,所以我認爲必須有避免這種情況的一種方式。
問題是,我需要採取什麼方法來確保無法使用此方法檢索證書?
在此先感謝。
一旦保存密碼,當您再次向用戶展示舊密碼時,不要將舊密碼重新放入框中。如果文本框與使用存儲的密碼的佔位符文本相匹配,則會放置一些佔位符文本。
至於其他一些技巧,如果可能的話,存儲密碼的散列而不是密碼本身。您可以使用Process Explorer等字符串實用程序在內存中查找密碼字符串。
如果無法存儲散列而不是密碼(例如,如果您要連接到某個其他服務,並且需要提交明文密碼),則可以使用SecureString,內存字符串加密。
至於安全地存儲密碼長遠來看,不只是在內存中,使用ProtectedData類加密字符串,你把它寫在硬盤驅動器之前,設置DataProtectionScope到CurrentUser
所以只有登錄的用戶可以得到數據。
請記住:您不能讓某人找到存儲的密碼,但您可以顯着提高獲取密碼的難度。
這也是我的第一種方法(使用與實際密碼長度相同的佔位符字符),但由於不會因此顯示的程序不顯示任何文本,所以我認爲必須有另一種方式。這方面的一個例子就是用C#編寫的KeePass應用程序。即使您在嘗試之前實際輸入它們,也無法檢索用於其登錄屏幕的字符。 – coolmine
它不需要是相同的長度,Windows一直都會這樣做,去計算一段時間內以用戶或計劃任務登錄的服務的保存密碼的點數。至於keypass是怎麼做到的,我不知道,我的印象是讓密碼掩碼設置了一些位,以防止其他應用程序看到。他們可能會使用非標準控件,如[SecureTextBox](http://securetextbox.codeplex.com/) –
這是我的猜測/希望,直到我偶然發現。我現在看到的是找出其他程序如何完成此操作,因爲它們是C#應用程序,就像我上面提到的沒有這個問題的應用程序。 – coolmine
你擔心另一個應用程序注入你的內存空間並查詢對象/控件嗎?每個控件都會在內存中包含密碼 - 以便隨後將其切換到任何需要的位置。 –
雖然你必須有不同的方法,因爲如果你閱讀了我與斯科特的討論,你會看到我提到KeyPass,它也是用C#編寫的,沒有遭受這種困擾。我試圖找到更多的例子,雖然它很難找到需要登錄憑據的C#應用程序。再舉幾個例子:filezilla遭受這個| Minecraft的發射器沒有。兩種不同的語言。我迄今爲止設法找到的唯一沒有公開登錄信息的.NET應用程序是KeyPass。但是既然有一個應用程序能夠做到這一點,那麼它一定是可能的。 – coolmine