Member 13866687 Ответов: 1

Обновление кода пароля дает мне ошибку? Может ли кто-нибудь помочь мне разобраться в том, что на самом деле отжимает


Привет, ребята, сегодня я разработал php-код для обновления пароля с помощью токена и электронной почты. Но всякий раз, когда я запускаю этот код, он показывает фатальную ошибку. Я знаю, что где-то ошибаюсь в этом коде, но сталкиваюсь с большим количеством проблем, чтобы исправить это. Может ли кто-нибудь здесь сказать мне, как я могу это сделать?
А html это просто:




<html>
<body>
<form method="post" action="resetPassword.php">
                    <span class="login100-form-title p-b-34 p-t-27">
                       Update Your Password
                    </span>
                        <input type="password" name="password" placeholder="Enter password">
                        <input type="password" name="cPassword" placeholder="Enter Password Again">
                        <button type="submit" name="forgotPass">
                            Update Password
                        </button>
                    </div>
                
                  
                </form>

</body>
</html>


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

:
<?php
    if (isset($_GET["token"]) && isset($_GET["email"])) {
        include("config.php");
        
        $password = $con->real_escape_string($_POST['password']);
        $cPassword = $con->real_escape_string($_POST['cPassword']);
            
        $data = $con->query("SELECT id FROM users WHERE email='$email' AND token='$token'");

        if ($data->num_rows > 0) {
            
            
            $password = $con->real_escape_string($_POST['password']);
            $cPassword = $con->real_escape_string($_POST['cPassword']);
            if ($password != $cPassword)
            $msg = "Please check your password again!";
        else{

            $hashedPassword = password_hash($password, PASSWORD_BCRYPT);

            $con->query("UPDATE users SET password = '$hashedPassword', token = '' WHERE email='$email'");

            echo "Your new password is: $password";
            
        }
                else {
            echo "Please check your link!";
        }
        }
    } else {
        header("Location: login.php");
        exit();
    }
        
?>

1 Ответов

Рейтинг:
1

Patrice T

Цитата:
Но всякий раз, когда я запускаю этот код, он показывает фатальную ошибку.

И у вас есть план, чтобы сказать сообщение об ошибке ?

$data = $con->query("SELECT id FROM users WHERE email='$email' AND token='$token'");

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]