1

ログインシステムを作成しています。しかし、何らかの理由で、パスワードを適切に検証することができません。パスワードが正しいとわかっているのに、パスワードが間違っていると何度も言われます。フォームコードは次のとおりです。

<form id="login" action="login_processing.php" method="post">
    <label2>Email</label2>
    <input type="text" name="email">
    <label2>Password</label2>
    <input type="password" name="password">
    <a class="forgot_password" href="forgot.php">Forgot password?</a>
    <input type="submit" class="custom_submit" name="sign_in" value="Sign In">
    <br />
    <br />
    <br />
    <a href="#sliderName" class="next">Create Account</a>
</form>

login_processing.php でログイン情報を処理するコードは次のとおりです。

require_once 'database_connect.php';
session_start();

$email = $_POST['email'];
$password = $_POST['password'];

$email = mysql_real_escape_string($email);
$findLogin = "SELECT password, salt FROM client_login WHERE email = '$email';";
$loginResult = mysql_query($findLogin);
if (mysql_num_rows($loginResult) < 1){
    $_SESSION['errNo_account'] = 'No account with that email exists';
    header('Location: login.php');
}
$userData = mysql_fetch_array($loginResult, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));
if ($hash != $userData['password']){
    $_SESSION['errPassword_incorrect'] = 'Incorrect Password';
    header('Location: myaccount.php');
}
else{
    $idSelect = "SELECT client_id FROM client_login WHERE email = '$email' ";
    $idResult = mysql_query($idSelect);
    while($idData = mysql_fetch_assoc($idResult)){
        $_SESSION['client_id'] = $idData['client_id'];
    }

}

これは、パスワードをハッシュしてソルトを追加した元の登録ページです。

function createSalt(){
        $string = md5(uniqid(rand(), true));
        return substr($string, 0, 3);
    }
        $salt = createSalt();
        $hash = hash('sha256', $salt . $hash);  

    $insertLogin = "INSERT INTO client_login(email, password, salt, created) VALUES('$email','$hash', '$salt', '$today')";
    mysql_query($insertLogin);

パスワードが間違っていると何度も言われます...そうではないことがわかっているのに。私はエラーが何であるかを理解できないようで、それは私を狂わせます!!!

どんな助けでも大歓迎です。

4

2 に答える 2

1

登録スクリプトでは、連結されたソルトと pw の単一のハッシュを使用していますが、ログイン スクリプトでは、ネストされた hash() 呼び出しを使用しています。

登録:

$hash = hash('sha256', $salt . $hash);

ログインする:

$hash = hash('sha256', $userData['salt'] . hash('sha256', $password));

違いに気づきますか?

于 2013-01-30T02:14:14.943 に答える
0

ここが私が失敗したところです..あわてて、新しいアカウントを作成するときに最初からパスワードを実際にハッシュすることはありませんでした。そのため、何もハッシュしていませんでした....それ自体だけです。そのため、「新しいアカウント」ページに(元のパスワードをハッシュするために)1行追加すると、問題全体が修正されました。

function createSalt(){
        $string = md5(uniqid(rand(), true));
        return substr($string, 0, 3);
    }
        $hash = hash('sha256', $password); //this was forgotten originally :(
        $salt = createSalt();
        $hash = hash('sha256', $salt . $hash);  

これを追加すると、上記のコードは正常に動作します。ありがとう!

于 2013-01-30T02:33:57.497 に答える