Проблема с проверкой возвращаемого значения из «password-verify» - PullRequest
0 голосов
/ 05 октября 2019

У меня проблема с проверкой пароля. Хотя я знаю, что пароль был введен правильно, я все равно получаю ложный результат. Я использую следующий код для ввода значения хеша в базу данных mySql: я заменил данные для входа на сервер;входные данные поступают из формы, которая создается, когда пользователь сканирует микрочип NFC:

$servername = "localhost";
$username = "xxxxxxxxx";
$password = "xxxxxxxxx";
$database = "xxxxxxxxx"; // substitute your mysql database name
$hash = password_hash($Pass, PASSWORD_DEFAULT);
if ($UID === "0") {
    echo "You have not scanned a chip to enter the registration process";
} else {
    $Type = $_POST["Type"];
    $Units = $_POST["UNITS"];
    $LstStln = $_POST["LstStln"];
    $Country = $_POST["Country"];
    if (empty($_POST["eMail"])) {
        $emailErr = "Email is required";
        echo "Email is required";
    } else {
        $eMail = test_input($_POST["eMail"]);
        // check if e-mail address is well-formed
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $eMail)) {
            die("Invalid email format. Try again.");
        }
        // Create connection
        $conn = new mysqli($servername, $username, $password, $database);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }
        $sql = "INSERT INTO ItsMine (UID, Password, email, Type, UNITS, LstStln, Country) VALUES ('$UID', '$hash', '$eMail', '$Type', '$Units', '$LstStln', '$Country')";
        $result = $conn->query($sql);
    }
}

Это соответствующий код, который обрабатывает входные данные из этой формы и возвращает ложное значение из пароля:

$servername = "localhost";
$username = "xxxxxxxxx";
$password = "xxxxxxxxx";
$database = "xxxxxxxxxx"; // substitute your mysql database name
$email = $_POST['email'];
$Pass = $_POST['Password'];
// Create connection
$conn = new mysqli($servername, $username, $password, $database);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
//get the hashed password from the database
$sql = "SELECT * From ItsMine where eMail = '$email'";
$result = $conn->query($sql);
$row = mysqli_fetch_assoc($result);
$hash = $row["Password"];
//Check password entered against the stored hash
if (password_verify($Pass, $hash)) {
    $tql = "SELECT * From ItsMine where eMail = '$email'";
}

1 Ответ

0 голосов
/ 05 октября 2019

В вашем вопросе недостаточно информации, чтобы быть уверенным в вашей проблеме, но я собираюсь сделать обоснованное предположение и сказать, что ваша проблема связана с w3schools. Пожалуйста, если вы использовали их уроки, СТОП! Они часто нарушают код и предлагают ужасающие практики.

Ваша проблема может быть объяснена использованием test_input() в вашем коде. Это ничего не делает, но повреждает ваши данные и вызывает проблемы для вашего кода. Можно даже считать это уязвимостью безопасности. Когда вы вставляете электронную почту в свой код, я вижу, что вы используете $eMail = test_input($_POST["eMail"]);, но когда вы выбираете хеш из базы данных, вы этого не делаете. Это очень вероятно, причина, почему ваш выбор не работает, как предполагалось. Для отладки вы можете сравнить выходные данные var_dump(test_input($_POST["eMail"])); и var_dump($_POST["eMail"]);. Если они отличаются, это означает, что эта функция повредила ваши данные.

Другой проблемой является отсутствие параметризованных подготовленных операторов , которые вы должны использовать. Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким данным!

Вы также должны разрешить отображение ошибок MySQLi на случай, если где-то возникнет ошибка с вашим SQL. Как получить сообщение об ошибке в MySQLi?

Наконец, еще одна достойная статья, которую вы должны прочитать:
Все, что вам нужно знать о предотвращении уязвимостей межсайтового скриптинга в PHP
Как предотвратить XSS с помощью HTML / PHP?
Как можно предотвратить внедрение SQL в PHP?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...