2011-03-30 46 views
3

我試圖確保一個即將被移動到公共服務器的網站。我剛剛完成了將密碼散列函數添加到我的所有登錄腳本。我使用FormsAuthentication.HashPasswordForStoringInConfigFile(pw, method)這樣做。我有一個關於我使用和它是否是安全的web服務器的進程問題:VB.Net密碼散列做法

  1. 密碼以純文本格式通過HTTPS發送到服務器
  2. 服務器查找在用戶表找到
  3. 明文密碼被追加與鹽
  4. 新的字符串使用上述功能
  5. 新湊版本進行比較散列用戶的鹽(幾個隨機字符)和它們的哈希和鹽醃存儲的密碼存儲的版本爲
  6. 如果相等,則允許登錄
  7. 如果不相等,登錄嘗試會記錄在會話變量中,最多3次,然後鎖定用戶計算機訪問登錄頁面,直到管理員驗證IP地址並解鎖。

這是否正確?我只是沒有看到鹽在這種方法中是如何有效的......無論如何,我所做的只是添加鹽和散列。這是否被認爲是加密?還是我錯過了一個步驟?我記得讀過像SHA1和MD5這樣的散列算法不是加密算法,那還有什麼需要做的?

+0

密碼永遠不應加密,它們必須始終被哈希。 – rook 2011-03-30 18:59:11

+0

謝謝,你說這很有趣。當它實際上只是散列化時,我一直稱這種方法爲「加密」。我對這個東西還是一個新的東西,所以我不知道有什麼不同。只是將問題標題從「加密」改爲「哈希」 – Dexter 2011-04-01 19:34:03

回答

3

這是正確的。鹽用於防止彩虹表攻擊,其中使用MD5散列的常見作品字典試圖獲得輸入。使用salt可以確保即使他們有MD5散列的單詞,也不會工作,因爲他們不知道鹽。

MD5算法是單向哈希算法,而不是加密值。不同之處在於,一旦散列了該值,就無法恢復到原始值。加密允許您解密數據並獲取原始值。所以你是正確的,他們是不一樣的,你的密碼沒有加密,他們被哈希。這意味着如果有人忘記了他們的密碼,就不能發送給他們。您必須提供一種方法讓他們重置密碼。這也意味着任何有權訪問數據庫的人都無法訪問原始密碼。這很好,因爲許多人在任何地方都使用相同的密碼,如果您有權訪問大量的用戶名和密碼列表,有人可以決定開始嘗試登錄銀行/信用卡網站。

你在做什麼是一種推薦的做法。

+0

好的,那很好。我們實際上有一個密碼重置表單,而不是發送密碼。那麼MD5呢?我讀過這些日子並不安全,但我不確定我的選項是在哈希函數上。據我所知,只有MD5和SHA1。還有更多嗎?或者我可以安全地將它用於存儲非敏感個人信息(例如電子郵件,電話和地址)的網站(無憑據或財務信息) – Dexter 2011-03-30 18:07:01

+0

@Dexter並非MD5不安全,而是有表格可供隨時查看快速的哈希。另一個問題是已經證明存在碰撞。這意味着有多個不同的值會導致相同的散列。我不知道發生碰撞的頻率的統計數字,但這很少見。使用MD5來保存密碼是安全的。並且在3次嘗試之後鎖定登錄表單使得難以強力攻擊該站點。我會小心IP鎖。知識產權並非個人獨有,可能會鎖定1人以上。 – NerdFury 2011-03-30 18:12:33

+0

是的,我想我只需要在數據庫中添加一個鎖定字段,然後鎖定用戶。謝謝你的幫助! – Dexter 2011-03-30 19:35:14

1

您不應該在會話中存儲重試計數 - 攻擊者可以在每次嘗試後簡單地放棄其會話cookie,允許他們按照自己的意願多次重試。相反,將其存儲在用戶記錄中。