gavin_daCEO Ответов: 1

Получить хэш пароля для работы над сценарием сброса пароля


Я пытаюсь хэшировать пароль из сценариев сброса пароля, но он не хэшируется, поэтому, если вы можете сказать мне, где я должен поместить его в сценарий. Большое спасибо!
<?php
session_start();

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "vuyanii";

$conn = null;
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    }
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
    
    if(isset($_POST['submit'])){
    $username           = strip_tags($_POST['username']);
    $npassword      = ($_POST['password']); 
    $cpassword  = ($_POST['cpassword']);    
    //echo $username;exit();
    $message ="";

        try{
    $query = "SELECT * FROM users WHERE username= '".$username."'";
    $stmt = $conn->prepare($query);
    $stmt->execute();
    if($stmt->rowCount() < 1){
    $message = '<p style="color:red;">Incorrect username entered</p>';
    }else if($npassword != $cpassword){
        $message = '<p style="color:red;">New password does not match confirm password</p>';
        
    }
    else{
        $password = password_hash($npassword, PASSWORD_DEFAULT);
        $query = "UPDATE users SET 
        password        =  '$npassword' 
        WHERE username  =  '$username'";
        $stmt2 = $conn->prepare($query);

        if ($stmt2->execute()){

            $message = '<p style="color:red;">Password Changed Successfully</p>';
            header('location:index.php');
            
        }else{
            $message = '<p style="color:red;">Password Not Changed</p>';
            
        }
    }
    }catch(PDOException $e){ echo $e->getMessage();}
    }

?>


Что я уже пробовал:

учебники и отредактировал мой сценарий пару раз

Richard Deeming

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

PHP: SQL-инъекция - руководство пользователя[^]

gavin_daCEO

я проверю это большое вам спасибо

phil.o

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

gavin_daCEO

спасибо. я так и сделаю

gavin_daCEO

спасибо. я так и сделаю

1 Ответов

Рейтинг:
0

Richard Deeming

Цитата:
$password = password_hash($npassword, PASSWORD_DEFAULT);
$query = "UPDATE users SET
password = '$npassword'
WHERE username = '$username'";
$stmt2 = $conn->prepare($query);
Вы храните хэшированный пароль в $password (хэшированный пароль), но вы устанавливаете пароль в базе данных на $npassword (обычный текстовый пароль).

Но вам действительно нужно разобраться с этим Уязвимости SQL-инъекций[^] в вашем коде. До тех пор, пока вы этого не сделаете, у вас может не быть никакой аутентификации на вашем сайте.


gavin_daCEO

я действительно пробовал его но он не хэширует пароль

Richard Deeming

Потому что вы вставляете обычный текстовый пароль ($npassword), а не хэшированный пароль ($password).

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

gavin_daCEO

спасибо что показали мне мою ошибку

jimmson

5!