Сохранить пароль из формы PHP. Что из этого является более безопасным? - PullRequest
1 голос
/ 22 февраля 2012
$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 ]

2 голосов
/ 22 февраля 2012

Метод № 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

0 голосов
/ 22 февраля 2012

Второй вариант (первый абсолютно неверен), но немного изменен:

  1. Использовать sha512 (Никогда не использовать md5)
  2. Использовать пользовательскую соль, отличную для каждого пользователя, но которая хранитсяв db
  3. Использовать серверную соль, лучше всего с некоторыми специальными символами, которых нет на клавиатуре
  4. Использовать параметры для вставки переменных в запрос ( php.net / manual / en / book.pdo.php )
...