2012-02-15 94 views
0

我們的一位客戶抱怨使用純文本密碼進行登錄密碼恢復。我知道的唯一解決方法是在查詢字符串中使用encripted username和passord自動登錄。明文密碼與自動登錄

還有哪些其他選項可以提高密碼恢復安全性?

謝謝。

+0

你是指以明文形式發送他們當前密碼,還是生成一個新密碼併發送? – Brandon 2012-02-15 22:03:50

+0

什麼是密碼恢復安全性?爲什麼密碼需要恢復? – crush 2012-02-15 22:04:04

+0

@Brandon:我的意思是當前密碼。 – abenci 2012-02-16 08:01:56

回答

2

您可以給他們發送一個URL,讓他們自己重置密碼。

您可以創建一個數據庫表,該數據庫表至少存儲用戶標識和散列值。

向用戶發送包含散列的鏈接,並在接收頁面上查找相關信息並允許用戶重置帳戶的密碼。我希望你將其作爲散列值存儲在數據庫中。純文本密碼絕對不能存儲或發送。

只要確保鏈接已過期或在密碼更改後停用。否則,有人可以隨時訪問該鏈接並更改密碼。

+1

換句話說,在任何地方存儲純文本密碼絕不是一個好主意。 – crush 2012-02-15 22:07:32

+0

有趣的是,我們使用ASP.NET MVC 3標準成員資格,並且使用了密碼。這是ASP.NET MVC 3提供的簡單改變一些參數的東西嗎? – abenci 2012-02-16 07:59:58

+0

是的,您可以將默認成員資格提供程序配置爲使用散列密碼而不是加密密碼。你必須設置'enablePasswordRetrieval =「false」'和'enablePasswordReset =「true」'。你也可以設置'passwordFormat =「Hashed」' – danludwig 2012-02-16 18:27:48

0

我不會以純文本形式向用戶的電子郵件地址發送帳戶的實際密碼。原因是因爲如果有人攻擊了用戶的電子郵件地址,他們有他們的真實密碼。此密碼很可能也會用於其他系統。

另一種方法是發送一個加密的查詢字符串,該查詢字符串鏈接到該用戶,並允許他們根據某種特定於該用戶的安全問題或人口統計信息來更改其密碼。

Facebook使用朋友圖像匹配名稱。如果你有他們的DOB和地址,你可以使用它(不安全)。或者你可以設置具體的安全問題和答案,這會更好。

+0

純文本版本的密碼甚至不應該在數據庫中可用於發送給用戶。身份驗證應使用單向散列來驗證數據庫的密碼。 – tawman 2012-02-15 22:09:32

+0

@tawman:我同意哈希和鹽是要走的路。 – 2012-02-15 22:46:17

1

沿着相同的路線布蘭頓的出色答卷,這裏是我們做什麼:

  1. 不要儲存在純文本,甚至可解密的值密碼。始終使用單向哈希算法存儲密碼。這意味着只有用戶才能知道明文密碼是什麼。

  2. 當用戶忘記密碼時,向他們提供輸入他們電子郵件地址的表單,然後單擊提交。

  3. 當他們提交他們的電子郵件地址時,創建一個包含兩個主要部分的表格行:第一個是密碼重置令牌(我們使用Guid)。標記應該有時間戳,以便您知道它何時創建以及何時到期(我們在提交後2小時內過期)。第二部分是密碼,用戶必須輸入才能重置密碼。

  4. 發送一封電子郵件給用戶,指向一個頁面的鏈接,該頁面將接受令牌和密碼。當他們點擊鏈接(或訪問頁面並手動輸入代碼)時,您可以向他們展示一個頁面,讓他們在不知道之前的值的情況下更改密碼。

使用時間受限的令牌是一個好主意,因爲如果用戶的電子郵件帳戶後受到損害,犯罪分子無法使用電子郵件重置密碼 - 當然假定電子郵件帳戶在密碼重置請求的2小時內不會受到影響。