@VladyaKun1210

Как реализовать хэширование пароля при регистрации?

Здравствуйте делаю регистрацию для админ панели сайта. Требуется сделать через password_has хэширование пароля, но пароль не солится. Заносится в базу данных без хэширования.

Предоставляю листинг:

$register = new Register();

if(isset($_POST["submit"])){
    $result = $register->registration($_POST["full_name"], $_POST["login"], $_POST["email"], $_POST["password"], $_POST["confurm_password"]);
    if($result == 1){
    echo
        "<script> alert('Registration Successful'); </script>";
    }
    elseif($result == 10){
    echo
        "<script> alert('Username or Email Has Already Taken'); </script>";
    }
    elseif($result == 100){
    echo
        "<script> alert('Password Does Not Match'); </script>";
    }
}

class Register extends Connection{
    /* Публичная функция для реализации регистрации */
    public function registration($full_name, $login, $email, $password, $confurm_password){
        $password = password_hash($password, PASSWORD_DEFAULT);
        $confurm_password = password_hash($confurm_password, PASSWORD_DEFAULT);
        $sql = "SELECT * FROM `users` WHERE `login` = '$login' OR `email` = '$email'";
        $dublicate = mysqli_query($this->con, $sql);
        if(mysqli_num_rows($dublicate) > 0){
            return 10;
        }
        else{
            if($password == $confurm_password){
                $sql = "INSERT INTO `users` (`full_name`, `login`, `email`, `password`) VALUES ('$full_name', '$login', '$email', '$password')" ;
                $query = mysqli_query($this->con, $sql);
                return 1;
            }
            else{
                
                return 100;
            }
        }
    }
}
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Соглашусь с предыдущим комментатором, код ужасный. Но главная проблема здесь не в коде, а в голове.
Все программирование построено на такой штуке, как логика. И если не умеешь мыслить логически - причем на самом элементарном, бытовом уровне - то в программировании точно делать нечего.

Зачем спрашивать, как хэшировать пароль, если у вас в коде это хэширование уже есть? Вот же оно -
$password = password_hash($password, PASSWORD_DEFAULT);
Где логика?
Зачем сравнивать хэши паролей, если вы хотите сравнить сами введенные пароли? Где логика? Хэши никогда не совпадут.
Зачем писать, что пароль "Заносится в базу данных без хэширования", если при текущем коде ничего никуда вообще не заносится, потому что не проходит сравнение хэшей. Где логика?
А если эту дурацкую проверку убрать, или поменять на сравнение самих паролей, то занесется именно хэш, можно убедиться

Но главная тут проблема - это конечно SQL инъекция.
Какой вообще смысл делать регистрацию, авторизацию - если кто угодно сможет зайти вообще без пароля под кем угодно? Где логика?
Надо обязательно научиться выполнять все запросы с переменными только через подготовленные выражения. А потом уже браться за регистрацию, пагинацию, и что угодно. Сначала учимся класть кирпичи, а потом только строим дом. А не наоброт.

Отдельное замечание по структуре.
Каждая функция должна выполнять только одну операцию.
Функция регистрации не должна заниматься проверкой входящих данных.
То, что она не напрямую обращается к массиву POST - это очень хорошо. Это вы правильно сделали.
Но все проверки из нее надо тоже убрать. А делать их перед вызовом.
И тогда не придется возвращать никакие цыферки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы