2013-04-01 186 views
4

我已經讀過,存儲數據庫中的passowrds的一種方法是通過以下方式。擁有一個包含用戶名,散列和鹽的數據庫表。鹽永遠不會顯示。如何安全地在數據庫中存儲密碼?

我生成密碼+鹽的散列。密碼由用戶發送,不存儲在數據庫中。如果生成的哈希與存儲在數據庫中的哈希相同,則密碼是正確的。

但我有我的疑惑。如果我發送密碼,在通過電報傳輸時可能會被嗅探,所以我認爲對通信進行加密也是必要的。所以使用哈希和鹽只是爲了保護管理員的數據?我的意思是,如果我將密碼存儲在數據庫中,管理員可以輕鬆訪問所有信息。如果我存儲散列,管理員不能訪問用戶的信息,因爲管理員沒有一半的信息,只有鹽而不是密碼。但是,當用戶需要發送密碼時,這可能會被某人嗅探,因此密碼被暴露。

保護用戶信息的最佳方式是什麼?

謝謝。

+0

http://www.troyhunt.com/2011/12/free-ebook-owasp-top-10-for-net.html –

回答

7

哈希密碼還可以保護您的數據免受外界的干擾。想象一下,如果有人使用SQL注入訪問你的數據,他只會得到一個散列&不是合格。您可以使用HTTPS在您的網絡上進行安全通信&使用您現有的散列密碼錶製作良好的安全模型。 Secure salted password hashing

2

如果您必須清楚地傳輸密碼,那麼您必須保護傳輸中的密碼。從瀏覽器到http服務器,您需要SSL/TLS。從應用服務器到數據庫,您需要encrypted connections

有些方案不需要傳輸密碼,最好知道的是HTTP Digest。您可以將Digest的HA1零件存儲在數據庫中。 HA1摘要中包含的領域祕密和用戶名稱包含對rainbow tables的有效保護,但摘要仍然基於MD5的事實使得該方案相對較弱,而不具備足夠好裝備的強力。然而,這樣的暴力只會揭示特定於給定用戶名和領域的分裂,因此使其很少使用。