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

标签 php javascript encryption hash

我在查看斯坦福的 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/

相关文章:

iphone - 在 iOS 应用程序中使用 SSL 进行登录

java - 使用 TripleDES 加密时将初始化 vector (IV) 附加到加密字节

php - 无法在Laradock中安装php7.2-ldap扩展

php - SQLSTATE[42S22] : Column not found: 1054 Unknown column '0' in 'field list Laravel

javascript - 使用 javascript/jquery 触发文件上传对话框

javascript - 如何防止文本选择阻碍 onMouseMove 事件?

javascript - 'if...else'没有检查任何其他条件,直接跳到最后一个 'else'语句

php - 插入多个数据

php - 背景图像是深色还是浅色?

powershell - 使用PowerShell的Coinspot API