Я пытаюсь создать систему регистрации и регистрации для своего веб-сайта, однако я бы хотел использовать более безопасный метод шифрования паролей, чем md5, но у меня возникают проблемы.Проблемы с расширением пароля PHP
function register_user($register_data) {
array_walk($register_data, 'array_sanitize');
$register_data['password'] = password_hash($register_data['password'], PASSWORD_BCRYPT, ['cost' => 10]);
$fields = '`' . implode('`, `', array_keys($register_data)) . '`';
$data = '\'' . implode('\', \'', $register_data) . '\'';
mysql_query("INSERT INTO `users` ($fields) VALUES ($data)");
email($register_data['email'], 'Activate your account', "
Hello " . $register_data['first_name'] . ",\n\nYou need to activate your account, so use the link below:\n\nhttp://thepuzzler.net/activate.php?email=" . $register_data['email'] . "&email_code=" . $register_data['email_code'] . " \n\n -ThePuzzler"); }
Это моя функция реестра, который у меня не было проблем с потому что, когда пользователь регистрируется, пароль Bcrypt хранится в моей базе данных. Проблема заключается в проверке пользователя.
function login($username, $password) {
$user_id = user_id_from_username($username);
$username = sanitize($username);
$password = password_hash($password, PASSWORD_BCRYPT, ['cost' => 10]);
return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password'"), 0) == 1) ? $user_id : false; }
Это моя система входа и когда я пытаюсь войти, Принести моя ошибка имя пользователя или пароль неверен. Это связано с тем, что я считаю, что зашифрованные пароли не совпадают. Поэтому я думаю, что это связано с линией, где я создаю переменную $password
и шифрую ее.
Также в моей базе данных находится столбец пароля varchar (64). Спасибо за помощь.
Я понимаю, что вы говорите, но password_verify() возвращает логическое значение, так что я не знаю, как вы можете иметь логическое значение равно пароль в базе данных. –
$ hashFromDb = mysql_result (mysql_query ("SELECT password FROM users WHERE username = '$ username'")); $ isValid = password_verify ($ passwordEnteredByUser, $ hashFromDb); if ($ isValid) {// пользователь принят, get userID} – MarcusSchwarz
Этот код является уязвимым для SQL-инъекции. –