0

現在、次のphpコードに問題があります。

if ($result['username'] == $_POST["name"]) {
        $bcrypt = new Bcrypt(10);
        $password = $_POST["password"];
        $hashdb = $result['password'];

        $hash = $bcrypt->hash($password);
        $isGood = $bcrypt->verify($password, $hashdb);

        if ($isGood == 1) {

            if($result['active'] == 1) {

                $_SESSION["login"] = $result['firstname']." ".$result['lastname'];
                $_SESSION["functionlevel"] = $result['functionlevel'];

                header("location:startpagina.php");
            } else {
                echo 'Account blocked or not activated';
            }


        } else {
            echo 'Password not correct';
        }

}  else {
    echo 'Username not correct';
}

パスワードのハッシュと検証にAndrewMoorebcryptクラスを使用しています。何らかの理由で、私のifステートメントは失敗したようで、2番目のifステートメントの後で突然停止します。これが失敗した場合は、パスワードが正しくないオプションが表示されます。しかし、それが真実である場合、それは3番目に続きませんif

私は2番目のようにさまざまなオプションを試しましたif

if ($isGood){

if ($isGood == true){

if ($isGood !== false){

if ($isGood !== 0){

しかし、ステートメントが満たされた場合、どういうわけかこれらのどれも継続しないようです。に進む代わりに、ログインページが再度表示されstartpagina.phpます。ログインページは、bcryptを実装せずに、2つのmd5ハッシュを相互にチェックするだけで正常に機能しました。

誰かが私が問題を見つけようとするのを手伝ってもらえますか?

4

1 に答える 1

0

ハッシュを正しく検証していないため、$isGoodは常にfalseになります。

変化する

    $hash = $bcrypt->hash($password);
    $isGood = $bcrypt->verify($password, $hashdb);

    $hash = $bcrypt->hash($_POST["password"]);
    $isGood = $bcrypt->verify($hashdb, $hash);

これは私がそれを書く方法です

if ($result['username'] == $_POST["name"]) {
        $bcrypt = new Bcrypt(10);

        if ($bcrypt->verify($result['password'], $bcrypt->hash($_POST["password"]))) {

            if($result['active']) {

                $_SESSION["login"] = $result['firstname']." ".$result['lastname'];
                $_SESSION["functionlevel"] = $result['functionlevel'];

                header("location:startpagina.php");
                exit();
            } else {
                echo 'Account blocked or not activated';
            }
        } else {
            echo 'Password not correct';
        }

}  else {
    echo 'Username not correct';
}
于 2012-12-22T10:42:10.997 に答える