1

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

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

看起来像这样:

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

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

然而,在隐藏密码的同时,它暴露了传输中的哈希值,该哈希值实际上用于进行 sql 查找。

我可以在两端进行哈希处理——客户端和服务器来解决这个问题。这会不会太杀了?

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

4

2 回答 2

2

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

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

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

于 2012-11-30T20:43:35.500 回答
1

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

要解决查找问题,请勿使用密码哈希进行查找。相反,使用用户名进行查找,当您取回数据时,比较密码哈希。如果它们匹配,那么你有一个有效的登录;如果没有,你不会。

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

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

至于标准解决方案……我相信标准与解决方案一样多。

于 2012-11-30T20:51:29.633 回答