我在查看斯坦福的 JavaScript 加密库时意识到我可以在客户端上进行哈希处理。
以前,我一直在使用 PHP crypt(),它很简洁,因为只需一个命令 - crypt() 我生成了一个 crypt 类型、随机盐、哈希并将这三个项目放入一个字符串中(md5,我知道它有点快但现在还可以,read here)。
看起来像这样:
crypt() MD5 hash example: $1$rasmusle$rISCgZzpwk3UhDidwXvin0
但是,如果在客户端使用以下方式加密:Stanford's Crypto Library , 并利用他们的 SHA-256 实现,在密码传输到服务器时隐藏密码的额外好处。
然而,在隐藏密码的同时,它暴露了实际用于执行 sql 查找的传输中的哈希。
我可以在两端(客户端和服务器)进行散列来解决这个问题。这会不会太过分了?
散列密码的标准、安全方法是什么?
最佳答案
老实说?最好在服务器端散列您的密码。然后,确保您的应用程序正在使用 HTTPS (SSL/TLS) 以便攻击者无法嗅探网络并检索传输中的明文密码。对于登录页面,您可以通过以下方式强制访问者使用 HTTPS:
<Location /login.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>
显然,在提供任何安全性之前,您需要为 SSL 配置 Web 服务器。
关于php - 在哪里散列密码(服务器 || 客户端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652842/