【问题标题】:Save password from php form. Which of this is more secure?从 php 表单中保存密码。哪个更安全?
【发布时间】:2012-03-12 22:15:46
【问题描述】:
$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 注册表单中保存表单数据。以上哪个代码是安全的?还有比这些更好的吗?

【问题讨论】:

标签: php md5 registration salt


【解决方案1】:

方法 #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

【讨论】:

    【解决方案2】:

    第二个选项(第一个完全错误),但略有改变:

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

    【讨论】:

    • 这似乎是一个不错的选择,使用独特的用户盐和服务器盐..我也会试试这个!
    猜你喜欢
    • 2020-10-19
    • 2014-05-17
    • 2017-12-26
    • 2014-07-24
    • 2017-09-26
    • 1970-01-01
    • 2023-04-07
    • 2015-09-09
    • 2011-07-11
    相关资源
    最近更新 更多