哈希密码的位置(服务器||客户端)

时间:2012-11-30 20:41:12

标签: php javascript encryption hash

我正在查看斯坦福的JavaScript加密库,并意识到我可以在客户端进行散列。

以前,我一直在使用PHP crypt(),因为只需一个命令,它就是简洁的 - crypt()我生成一个crypt类型,随机salt,哈希并将这三个项放入一个字符串(md5,我知道它有点快,但现在可以,read here)。

看起来像这样:

crypt() MD5 hash example:          $1$rasmusle$rISCgZzpwk3UhDidwXvin0

但是,如果使用:Stanford's Crypto Library在客户端上进行加密,并利用它们的SHA-256实现,则可以在将密码传输到服务器时隐藏密码。

然而,在隐藏密码时,它会公开传输中的哈希,这实际上用于执行sql查找。

我可以在两端哈希 - 客户端和服务器来解决这个问题。这会过度杀人吗?

哈希密码的标准安全方法是什么?

2 个答案:

答案 0 :(得分:2)

诚实?最好在服务器端散列您的密码。然后,确保您的应用使用HTTPS(SSL / TLS),以便攻击者无法嗅探网络并检索传输中的纯文本密码。对于登录页面,您可以使用以下命令强制访问者使用HTTPS:

<Location /login.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>

显然,您需要先为您的Web服务器配置SSL,然后才能提供任何安全性。

答案 1 :(得分:1)

唯一可以保护的东西是snoopers获取用户密码的明文。如果该用户在其他地方使用该密码,则可以认为这是一件好事。窥探者仍然可以通过传递嗅探密码哈希来复制POST。

要解决查找问题,请不要使用密码哈希来执行查找。而是使用用户名进行查找,当您获取数据时,比较密码哈希值。如果匹配,那么您有一个有效的登录;如果没有,你就不会。

您还可以在服务器端再次散列哈希,以确保没有人知道您存储的哈希值。在安全性方面没有矫枉过正。

但是所有这些仍然无法防止已经拥有应该被POST的值的窥探者。

至于标准解决方案......我确信有足够多的标准解决方案。