如何安全地存储密码等注册/登录信息?

时间:2010-08-30 09:29:54

标签: php security

我正在我的网站上重新注册我的注册,并想知道我的密码哈希是否正确。或者,如果有更好的更安全的方式,我可以做到。我在某处读到了盐可以基于每个用户写入数据库。

到目前为止,这是我的安全措施:

$salt = sha1(md5($activecode).$username);

$username = mysql_real_escape_string($_POST['username']);
$activecode = mysql_real_escape_string(time());
$pass1 = sha1(md5($_POST['pass1'].$salt));
$pass2 = sha1(md5($_POST['pass2'].$salt));

4 个答案:

答案 0 :(得分:1)

你的例子很奇怪。 我认为第1行是在第4行之后?

您当然可以将动态salt密钥保存到数据库中。但如果你的md5泄露,它可能会相处。所以这对彩虹表没有任何好处。

当然你可以将盐密钥保存到单独的数据库或其他东西,但我不知道会有多么有意义。

无论你做什么,只在你的应用程序中保留一个盐键。

但更重要的是例如 *使用https保护您的登录信息, *强制您的用户使用强密码 *密码shuold每变化一次 * x秒后的logut *提供远程注销 ......那样的东西

我认为双重哈希可能会导致问题。不知道为什么,但我没有看到太多的意义......

答案 1 :(得分:0)

答案 2 :(得分:0)

也许我错过了什么,但你怎么能够验证密码。您使用盐的当前时间戳,这意味着在您检查密码时,您将获得完全不同的东西。或者您还将activecode保存到数据库中?

如果你这样做,对我来说很好。

答案 3 :(得分:0)

这段代码片段的安全性很小。 以及常识。对两个密码进行哈希处理有什么用呢?我想你必须比较输入的密码,然后只做一个哈希。

MD5在这里真的错了。只需将其sha1($_POST['pass1'].$salt));

mysql_real_escape tring是一个与数据库相关的函数,而不是表单处理函数。 在将数据添加到查询中之前,正确使用它是正确的。对于用引号括起来的查询字符串。

乔说了什么。