Как обновить хешированный пароль с помощью php и pdo? - PullRequest
0 голосов
/ 08 мая 2019

В последние месяцы я создаю форум для школьного проекта, но я хочу, чтобы пользователь мог изменить свой пароль. Как вы можете обновить пароль с помощью PHP и PDO.

Я думал, что вы можете использовать:

$password = $_POST['password'];
$confirm_password = $_POST['confirm_password']; 

if($password == $confirm_password){
    $stmt = $conn->prepare("UPDATE password SET password = 
    'password_hash($password)' WHERE id=$id");
} else {
     .....
}

Но это не то, что я хотел ...

И у меня есть форма, но я не могу показать это, потому что что-то пошло не так. Надеюсь, вы, ребята, сможете мне помочь.

Ответы [ 3 ]

3 голосов
/ 08 мая 2019

То, что вы используете здесь, называется подготовленным оператором культа груза , и оно не защищает вас от SQL-инъекций.Правильный код будет

$stmt = $conn->prepare("UPDATE password SET password = ? WHERE id=?");
$stmt->execute([password_hash($password), $id])
1 голос
/ 08 мая 2019

Все, что вам нужно сделать, это записать новый пароль в базу данных после хеширования, конечно,

$password = $_POST['password'];
$confirm_password = $_POST['confirm_password']; 

if($password == $confirm_password){

    $stmt = $conn->prepare("UPDATE password SET password = :pwd WHERE id=:id");
    $stmt->execute([':pwd' => password_hash($password), ':id'=> $id]);
} else {
     .....
}

Ваш скрипт был широко открыт для Атака SQL-инъекцией Даже если вы экранируете входные данные, это небезопасно! Используйте подготовленные параметризованные операторы в MYSQLI_ или PDO API

0 голосов
/ 09 мая 2019

Я нашел решение, которое пропустил PASSWORD_DEFAULT в хэше моего пароля. Если бы я сделал что-то не так, оставил бы реакцию, я бы оценил это.

if(isset($_POST['update_password'])){
$id = $_SESSION['user_id'];  
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password']; 

if(strlen($password) >= 8){
    if($password == $confirm_password){

        $new_password = password_hash($password, PASSWORD_DEFAULT);

        $stmt = $conn->prepare("UPDATE forum_inhoud SET password = :new_password 
        WHERE id=:id");
        $stmt->execute([
            ':new_password' => $new_password,
            ':id' => $id
        ]);

        $_SESSION['success'] = 'Wachtwoord is bijgewerkt!';
        header('Location: ../../profile.php');
        exit(0);
    }
} else {
    $_SESSION['failed'] = 'Er is iets misgegaan!';
    header('Location: ../../profile.php');
    exit(0);
}   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...