1

Phpass を自分の Web サイトに追加しようとしていますが、何をしても $check ブール値が true を返して実際にログインできるようにすることはできません。これまでのところ、パスワードを暗号化して保存することができましたデータベース上にありますが、それに対するチェックは失敗しています。

<?php

if(isset($_POST['Login'])){

    $EM = $_POST['Email'];

    // Password from form input
    $PW = $_POST["Password"];

    // Passwords should never be longer than 72 characters to prevent DoS attacks
    if (strlen($PW) > 72) { die("Password must be 72 characters or less"); }

    // Just in case the hash isn't found
    $stored_hash = "*";

    // Retrieve the hash that you stored earlier
    $stored_hash = "this is the hash we stored earlier";

    // Check that the password is correct, returns a boolean
    $check = $hasher->CheckPassword($PW, $stored_hash);

    if ($check) {
    // passwords matched! show account dashboard or something

    $result = $con->query("select * from user where Email='$EM' AND Password='$PW'");

    $row = $result->fetch_array(MYSQLI_BOTH);

    session_start();

    $_SESSION["UserID"] = $row['UserID'];

    header('Location: Account.php');


    } else {

     // passwords didn't match, show an error
    header('Location: Fail.php');
    }


}

私は既存のログインに追加しようとしてきたので、それを壊している余分なコードがあるのだろうか? または、ログイン時に何をしようとしても、読み込まれるのは

header('Location: Fail.php');:|

前もって感謝します!

編集:そうです、ハッシュ化されたパスワードをデータベースに保存する登録ファイルがあります:

if(isset($_POST['Register'])){

    session_start();
    $FName  = $_POST['First_Name'];
    $LName  = $_POST['Last_Name'];
    $Email  = $_POST['Email'];

    // In this case, the password is retrieved from a form input
    $PW = $_POST["Password"];

    // Passwords should never be longer than 72 characters to prevent DoS attacks
    if (strlen($PW) > 72) { die("Password must be 72 characters or less"); }

    // The $hash variable will contain the hash of the password
    $hash = $hasher->HashPassword($PW);

    if (strlen($hash) >= 20) {

    // Store the hash somewhere such as a database
    // The code for that is up to you as this tutorial only focuses on hashing passwords
    $sql = $con->query("INSERT INTO user (Fname, Lname, Email, Password)Values('{$FName}','{$LName}', '{$Email}', '{$hash}')");

    } else {

     // something went wrong

    }

    echo $hash;

//  $StorePassword = password_hash($PW, PASSWORD_BCRYPT, array('cost' => 10));



    header('Location: Login.php'); //Redirect here when registering

そして、データベースからそれを読み取り、入力したパスワードと比較したいなど.

mysqli db からその情報を取得して比較するにはどうすればよいですか? うまくいけば、それが機能しますか?

これは私がフォローしていたチュートリアルです: https://sunnysingh.io/blog/secure-passwords

4

1 に答える 1

0

if(isset($_POST['Login'])){

    $EM = $_POST['Email'];

    // Password from form input
    $PW = $_POST["Password"];

    // Passwords should never be longer than 72 characters to prevent DoS attacks
    if (strlen($PW) > 72) { die("Password must be 72 characters or less"); }

    $result = $con->query("select * from user where Email='$EM'");

    $row = $result->fetch_array(MYSQLI_BOTH);

    if ($row) {

        // Check that the password is correct, returns a boolean
        $check = $hasher->CheckPassword($PW, $row['Password']);

        if ($check) {
            // passwords matched! show account dashboard or something

            session_start();

            $_SESSION["UserID"] = $row['UserID'];

            header('Location: Account.php');
            exit;
        }
    }

     // passwords didn't match, show an error
    header('Location: Fail.php');

}
于 2016-02-06T17:30:48.100 に答える