如何安全地在数据库中存储密码?

时间:2013-04-01 10:56:29

标签: sql-server passwords

我已经读过在数据库中存储passowrds的一种方法是通过以下方式。要有一个包含username,hash和salt列的数据库表。盐永远不会出现。

我使用密码+ salt生成哈希。密码由用户发送,不存储在数据库中。如果生成的哈希与存储在数据库中的哈希相同,则密码是正确的。

但我有疑虑。如果我发送密码,它可能会被电线传输时被嗅探,所以我认为加密通信也是必要的。因此,使用哈希和盐只是为了保护管理员的数据?我的意思是,如果我将密码存储在数据库中,管理员可以轻松访问所有信息。如果我存储哈希,管理员就无法访问用户的信息,因为管理员没有一半的信息,只有盐而不是密码。但是,当用户需要发送密码时,这可能会被某人嗤之以鼻,因此密码会暴露出来。

如何保护用户信息的最佳方式?

感谢。

2 个答案:

答案 0 :(得分:7)

哈希密码还可以保护您的数据免受外人的侵害。想象一下,如果有人使用SQL注入来访问您的数据,他只会得到一个哈希&不是通行证。您可以使用HTTPS通过网络进行安全通信。使用现有的散列密码表来获得良好的安全模型。 Secure salted password hashing

答案 1 :(得分:2)

如果您必须以明文形式传输密码,则必须在传输过程中保护密码。从浏览器到http服务器,您需要SSL/TLS。从应用程序服务器到数据库,您需要encrypted connections

有些方案不需要传输密码,最好的是HTTP Digest。您可以将Digest的HA1部分存储在数据库中。 HA1摘要中包含的领域秘密和用户名包含作为rainbow tables的有效保护,但Digest仍然基于MD5这一事实使得该方案相对较弱,对抗设备充足的暴力。然而,这种蛮力只能揭示特定于给定用户名和领域的分裂,因此使用它很少。