Проверка соответствия пароля в той же строке, что и имя пользователя - PullRequest
0 голосов
/ 06 марта 2020

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

По сути, моя база данных выглядит так:

USERNAME    PASSWORD       EMAIL
Xp10d3      Password12345  xp10d3@gmail.com
IiBlurBeriI Password33333  iiblurberii@gmail.com

Я хочу проверить, вводил ли пользователь свое имя пользователя и совпадает ли пароль, но я не совсем понимаю, как это сделать. Я получил некоторую помощь в создании кода, но, похоже, он не работает, поскольку любое имя пользователя может быть введено ДО того, как оно будет подтверждено (проверено в электронной почте пользователя), и после того, как они введут его, пароль не должен совпадать. Ex. ЧТО ХОЧУ: Пользователь вводит имя пользователя Xp10d3. Пользователь вводит пароль Password1111. Есть сообщение об ошибке, говорящее, что пароль не совпадает. Затем пользователь вводит пароль Password12345. Это допустимо и устанавливает переменную $ _SESSION в их имя пользователя. ЧТО ПРОИСХОДИТ СЕЙЧАС: Пользователь вводит Xp10d3, который находится в базе данных. Пароль, который они вводят, это Password12345, который является правильным, и они отправляются на экран, который говорит, что их пароль неправильный.

Я провел некоторое тестирование и зарегистрировал все переменные. Все сводилось к тому, что $row["PASSWORD"] было неверно. Как это исправить?

Некоторые важные замечания: Переменная $_SESSION['password_not'] не является хешированным паролем. Однако все остальные переменные, которые я получаю, за исключением этой переменной и переменной $password, хэшируются.

Список переменных, которые НЕ хэшируются:

$_SESSION['password_not']
$password

Переменные, которые хэшированы:

$row["PASSWORD"]
Any passwords in the database

Код: login_check_update. php:

<!DOCTYPE HTML>
<html>
<head>
    <style>
        body {
            text-align: center;
            font-family: sans-serif;
        }
        a {
            text-decoration: none;
            color: blue;
        }
        #logout {
            margin: 0 auto;
            text-align: center;
            border: 1px solid;
            border-radius: 5px;
            max-width:1024px;;
            height: 800px;
        }
    </style>
</head>
<body>
    <div id="logout">
        <?php
            session_start();
            /* Sends an email to the user and adds the special key to another database */
            $username = $_GET['username']; /* Gets the username that was submitted in the HTML form. */
            $password = $_GET['password']; /* Gets the password that was submitted in the HTML form. */
            $servername = "localhost"; /* MySQL database. Change if needed! Most of the time its not localhost unless you're hosting on your computer. */
            $user = 'xxx'; /* MySQL username. Change if needed. */
            $pass = 'xxx'; /* MySQL password. Change if needed. */
            $dbname = 'vibemcform'; /* MySQL database name. Change if needed. */

            $bytes = random_bytes(10); /* Randomized code */
            $key = bin2hex($bytes); /* Makes the randomized code */

            $_SESSION['username'] = $username;
            $_SESSION['password'] = $password;

            $link = "live.php";

            $con = new mysqli($servername, $user, $pass, $dbname); /* Connects to the database */
            $query = "SELECT USERNAME FROM data WHERE USERNAME = '".$username."'";
            $result = $con->query($query);
            $row = $result->fetch_assoc();
            $selectTwo = "SELECT PASSWORD FROM data WHERE PASSWORD = '".$password."'";
            $result2 = $con->query($selectTwo);
            $row2 = $result->fetch_assoc();

            /* Delete after */
            $test = $row["USERNAME"];
            $testTwo = password_verify($_SESSION['password_not'], $row["PASSWORD"]);

            if ($username == $row["USERNAME"] && password_verify($_SESSION['password_not'], $row["PASSWORD"])) {
                    echo "Found data in the database! Visit the chat!";
                    echo "<form action='live.php' method='post'><a href='".$link."'><input type='submit' name='btn1' value='$username'/></a></form>";
                    echo "Session ID: ". session_id() . ". ";
            } else {
                echo "Username not found/password incorrect. Please try again!";
            }

            $conn = null;
            exit;
        ?>
        <a href="index.html">Home</a>
    </div>
</body>
</html>

1 Ответ

1 голос
/ 07 апреля 2020

Это была просто глупая ошибка. Причина, по которой мой код не работал, заключалась в том, что в столбце ПАРОЛЬ было всего 60 символов, а поскольку я использовал password_ha sh (), для базы данных требовалось не менее 255 символов, таким образом отсекая более половины пароля.

...