0

こんにちは私は暗号化機能を使用しているときに問題があります。データベースと入力したパスワードを確認したいのですが。

私が抱えている問題は、パスワードを入力すると、まったく異なるパスワードの場合でもリダイレクトされるということです。これは私には奇妙です。

だから私はこの関数を使用します:

function salt_crypt($login_password, $rounds = 7) { 
    $salt = ""; 
    $salt_chars = array_merge(range('A','Z'), range('a','z'), range(0,9)); for($i=0; $i < 22; $i++) { 
    $salt .= $salt_chars[array_rand($salt_chars)]; 
    } 
    return crypt($login_password, sprintf('$2a$%02d$', $rounds) . $salt);

配列を返す関数から保存されたパスワードを取得します。

function ab($a){
    global $db;
    $query = $db->query("SELECT col_a, col_b FROM table WHERE Field= '$a' ");
    $check = $query->fetch_assoc();
    return ($check);
}

これはこの関数で使用されます:

function login($a, $login_password){
    $user_data = user_data($a);
    global $db;
    $uname = sanitize($uname);
    $crypted_password = salt_crypt($login_password);

    if(crypt($user_data['col_b'], $crypted_password) == $crypted_password) { 

        $query = $db->query("SELECT col_a FROM table WHERE Field_a= '$a' AND Field_b = '$crypted_password' ");
        $check = $query->num_rows;
        return ($check == 1) ? true : false;
    }
}

この関数が呼び出され、結果ヘッダーが返される場合は次のようになります。

$login = login($a, $login_password);
        if ($login === false){
            $errors[] = "text";
        } else {
            header('Location: page.php');
        }
4

1 に答える 1

2

すべてのコード パスが値を返すわけではありません -> if ステートメントが false であっても、関数は true を返します。次のようなもので試してください:

function login($a, $login_password){
//All your stuff

     if(crypt($user_data['col_b'], $crypted_password) == $crypted_password) { 
         //Your stuff
     }

    return false
}
于 2013-02-22T12:38:27.680 に答える