2011-08-09 46 views
0

我繼承了使用ASP.NET成員資格提供程序進行用戶管理的應用程序。作爲各種修補程序和增強功能的一部分,我將用散列值代替純文本密碼的使用。在現有的重置密碼頁面上,用戶需要爲他們的安全問題,他們當前的密碼,他們想要的新密碼和所需的新密碼再次輸入正確的答案。使用散列密碼驗證安全問題的答案

我遇到了一個問題,似乎沒有一種簡單的方法來驗證輸入的安全問題答案是否正確。沒有這個檢查,用戶可以在該字段中輸入任何內容,只要他們輸入了正確的當前密碼,它將被重置。

我不能調用GetPassword(),因爲如果在Web.config中passwordFormat =「Hashed」,該方法不可用。

我試圖手動解密哈希的安全性問題的答案描述here但只適用於加密的值,而不是那些散列(邏輯我想:))

我已經手動嘗試散列用戶輸入的答案和比較即存儲在數據庫中的值,但兩個散列字符串不同。我正在使用第三篇文章here中描述的算法,它在比較散列密碼時可行,但不幸的是,不適用於哈希安全問題答案。

有沒有人有更多的建議?這似乎相當基本,所以我有一種感覺我錯過了一些明顯的東西。

回答

0

Bah,稍後一杯咖啡,答案很明顯。我在我的驗證方法具有這樣的:

var result = DataService.ExecuteScalar(cmd); 
return result == null; 

我應該有這樣的:

var result = DataService.ExecuteScalar(cmd); 
return result != null; 

它還看來,我錯了,當我考慮安全問題答案的散列字符串是不同的。

1

我不會直接回答你的問題有關驗證的安全性問題,但我想強調的是,安全問題是一個非常不好的做法在安全性方面(讀「第三部分:使用保密問題here)。

取而代之,發送給用戶的電子郵件(他們在註冊時已經確認過了)一個「重置密碼鏈接」,允許他們創建一個新密碼,假設他們是唯一可以訪問他們電子郵件的密碼。

+0

Ofer,你是絕對正確的,但不幸的是,我們可以用我們能做的時間來限制我們。在此之前,密碼以純文本形式存儲在數據庫中,並通過電子郵件以純文本形式傳輸,因此至少我們改進了用戶管理功能的某些方面。 – Malice

+0

你是絕對正確的,事情必須按順序完成。我只是想強調(爲了所有其他人將通過這個頁面)安全問題是不好的做法... –