从php表单保存密码。哪一个更安全?

时间:2012-02-22 15:03:28

标签: php md5 registration salt

$pass = substr(md5($_SERVER['REMOTE_ADDR'].microtime().rand(1,100000)),0,6);
        $insert = mysql_query("INSERT INTO users(username, password) VALUES( '".$username."', '".md5($pass)."')");

$salt = "zfgse5tfgHk2jdf4hGiuyeV9trejkewQ5kjujPhysftf7agfd";
$pass = crypt($password, "$1$".$salt);
$insert = mysql_query("INSERT INTO users (username, password) VALUES ('".$username."', '".$pass."')");

我正在从php注册表单中保存表单数据。以上哪些代码是安全的?有什么比这些更好的吗?

2 个答案:

答案 0 :(得分:2)

方法#1将彻底破坏一切,你永远无法再次登录。相当安全(除非你没有逃脱$username,在这种情况下它完全没有价值),但可能不是你的意图。

方法#2将起作用;但看起来有点愚蠢,复杂的做一些应该直截了当的事情。

以下是我通常使用的内容:

public static function Hash($value) {
    return hash('sha512', hash('sha512', $value) . Config::HashSalt);
}

其中Config::HashSalt是你的长,更随机的盐串。这需要在课堂上。以下是结构示例:https://github.com/minitech/ReTicket/blob/master/config.php

答案 1 :(得分:0)

第二个选项(首先是完全错误的),但略有改变:

  1. 使用sha512(从不使用md5)
  2. 对每个用户使用不同的用户salt,但存储在db
  3. 使用服务器salt,最好使用非键盘上的某些特殊字符
  4. 使用参数将变量插入查询(php.net/manual/en/book.pdo.php