2013-04-01 113 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的事实使得该方案相对较弱,而不具备足够好装备的强力。然而,这样的暴力只会揭示特定于给定用户名和领域的分裂,因此使其很少使用。