2011-03-23 74 views
5

我對Web開發(今年1月份開始)和Web安全(不到一週前開始!)都不熟悉,所以請原諒我的問題是否嚴重沒有教育,錯誤或簡單愚蠢。在通過HTTPS發送密碼之前是否需要散列密碼?

我工作的公司主要產品是一個很好的老式客戶/服務器系統。爲了讓它更吸引我們的客戶,我被賦予了開發一系列以任務爲中心的Web應用程序的任務,以補充系統的整個業務流程爲中心的設計。例如,如果用戶在組織中的角色包括批准採購訂單和付款訂單,那麼他們可能會發現使用WebApprovals應用程序比打開採購和資金管理模塊更容易,並分別使用它們來批准採購訂單和付款訂單。

不用說,我所有的Web應用程序都有一個登錄頁面。當然,我需要他們安全。出於這個原因,通過設計,這些Web應用程序只能通過HTTPS使用,而不能使用普通的HTTP。

現在,我想知道如何安全地通過HTTPS發送密碼而無需任何進一步的安全措施。它足夠安全嗎?在安全領域有經驗的人必須說些什麼?

回答

14

HTTPS將處理傳輸安全性,所以沒有理由在客戶端對它們進行散列。如果你這樣做了,從服務器的角度來看,哈希密碼本質上變成了真正的密碼。如果某人竊取了您的數據庫,那麼每一行都將具有服務器期望通過網絡接收的值。攻擊者可以簡單地創建一個新的客戶端,直接發送哈希而不用打擾任何真正的哈希。

但是,通過網絡發送的密碼不應該存儲在數據庫中。相反,應該有一個每用戶隨機鹽。這應該用來散列密碼服務器端

請參閱Salting Your Password: Best Practices?

+0

@Matthew:我真的不明白隨機醃製是如何工作的。我如何根據包含隨機鹽的哈希來驗證用戶的密碼? – pyon 2011-03-23 21:59:21

+2

@Eduardo,您將每個用戶salt和hash存儲在數據庫中。兩者都不是真的祕密。然後,您散列存儲的鹽和提供的密碼,並根據存儲的散列檢查結果。請參閱[本文](http://wheelersoftware.com/articles/storing-passwords-securely-hash-salt.html)。您也可以搜索堆棧溢出以獲取更多信息。 – 2011-03-23 23:40:55

+0

@Matthew:如果這些鹽實際上已保存在數據庫中並與其各自的用戶相關聯,那麼在使用隨機salt和使用非公共用戶特定字段(如UserID)的系統中,UserID和用戶名是單獨的字段)作爲鹽? – pyon 2011-03-23 23:49:18