我正在查看斯坦福的JavaScript加密库,并意识到我可以在客户端进行散列。
以前,我一直在使用PHP crypt(),因为只需一个命令,它就是简洁的 - crypt()我生成一个crypt类型,随机salt,哈希并将这三个项放入一个字符串(md5,我知道它有点快,但现在可以,read here)。
看起来像这样:
crypt() MD5 hash example: $1$rasmusle$rISCgZzpwk3UhDidwXvin0
但是,如果使用:Stanford's Crypto Library在客户端上进行加密,并利用它们的SHA-256实现,则可以在将密码传输到服务器时隐藏密码。
然而,在隐藏密码时,它会公开传输中的哈希,这实际上用于执行sql查找。
我可以在两端哈希 - 客户端和服务器来解决这个问题。这会过度杀人吗?
哈希密码的标准安全方法是什么?
答案 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的值的窥探者。
至于标准解决方案......我确信有足够多的标准解决方案。