2010-08-30 138 views
1

我正在重新在我的网站上注册我的注册过程,并且想问我的密码散列是否正确。或者如果有更好的安全方式,我可以做到。我在某处读到盐可以写入到每个用户的数据库。如何安全地存储注册/登录信息,如密码?

这是迄今为止我的安全:

$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)); 
+1

您不需要在'time'的返回值上应用'mysql_real_escape_string'; 'time'总是返回一个整数值。 – Gumbo 2010-08-30 09:41:36

回答

0

这个非常小的代码片段与安全性。 以及常识。这两个密码的散列有什么用处?我想你必须比较输入的密码,然后做一个哈希。

MD5在这里确实是错误的。只是做它sha1($_POST['pass1'].$salt));

mysql_real_escape tring是一个数据库相关的功能,而不是形式处理一个。 在将数据添加到查询之前,恰当的地方使用它。用引号括起来的查询字符串。

乔说过的话。

0

也许我失去了一些东西,但你曾经如何将将能验证密码。你使用盐的当前时间戳,这意味着当你检查密码时,你会得到完全不同的东西。或者你也将活动代码保存到数据库中?

如果你这样做,它看起来很好。

1

你的例子很奇怪。 我觉得第1行在第4行之后?

您当然可以将动态盐键保存到数据库中。但如果你的md5被泄露,它可能会相处。所以这对彩虹桌不会有任何好处。

当然你可以保存一个盐键到一个单独的数据库或其他东西,但我不知道这将是多么有意思。

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

但更重要的事情是,例如,以 *确保与HTTPS登录, *强制用户使用强密码 *密码shuold改变每律而 * x秒后logut *提供远程注销 ...像这样的东西

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

相关问题