在哪里散列密码(服务器||客户端)



我正在查看斯坦福大学的JavaScript加密库,并意识到我可以在客户端上进行哈希处理。

以前,我一直在使用 PHP crypt() 简洁,因为只有一个命令 -crypt() 我生成了一个 crypt 类型、随机盐、哈希并将这三个项目放入一个字符串中( md5,我知道它有点快,但现在还可以,请阅读这里)。

看起来像这样:

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

但是,如果使用斯坦福大学的加密库在客户端上加密,并利用其SHA-256的实现,则可以在密码传输到服务器时隐藏密码。

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

我可以在两端进行哈希处理 - 客户端和服务器来解决这个问题。 这会不会矫枉过正?

列密码的标准、安全方法是什么?

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

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

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

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

若要解决查找问题,请不要使用密码哈希进行查找。 相反,使用用户名进行查找,并在取回数据时比较密码哈希。 如果它们匹配,则您具有有效的登录名;如果没有,你就不会。

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

但所有这些仍然不能防止已经具有应该发布的值的窥探者。

至于标准解决方案...我敢肯定,有多少解决方案,就有多少标准。

相关内容

最新更新