1

私は最近、パスワードを不適切に保存していたという発見につながった会話をしました。私は常に md5 を使用しており、十分に安全だと考えていました。ただし、私が発見したいくつかの読書の後、そうではないため、bcryptに切り替えています

とにかく、ログイン プロセッサを作成していますが、ユーザーが入力したパスワードを既知のソルトで暗号化すると、パスワードが等しくないことが示されますが、エコーすると同一です。

コードは次のとおりです。

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

/*find that username in the database and grab their info*/
$check_username = "SELECT * FROM users WHERE username = ?";
    $query_username = $conn->prepare($check_username);
            $query_username->execute(array($username));
                $count = $query_username->rowCount();

    if($count > 0)/*if the user was found in the database*/
        {       
while($row = $query_username->fetch())
            {
                $salt = $row['salt'];
                $password_encrypted = $row['password'];
                $encrypt_password = crypt($password, $salt);

                if ($encrypt_password == $row['password'])
                    {
                        echo "success";
                    }
                else
                    {
                        var_dump($encrypt_password);
                        echo "<br />";
                        var_dump($row['password']);
                    }
            }
}

この if ステートメントが失敗する理由がわかりません。前もって感謝します。

vardump の出力:

string(60) "$2y$09$l2j89a6l7eoaz4dqpn5xzeAyBP1l7QzQuT7rIj8qYWX1/qJz7MYee" 
string(61) "$2y$09$l2j89a6l7eoaz4dqpn5xzeAyBP1l7QzQuT7rIj8qYWX1/qJz7MYee"

エラーが見つかりました。列の文字列を 60 に変更して問題を解決したため、バイナリを使用しています。vardump の使用に関するアドバイスをありがとう

4

1 に答える 1

2

使用しないechoか、少なくとも厳密な境界なしでは使用しないでください。そうしないと、同じ出力を生成するように見える次の 2 行と同じ状況になります。

print "hello"
print "hello     "

変数を使用するvar_dumpか、エコーする必要がある場合は、HTML レンダラーが出力を詰まらせないように変数をエコーし​​ます (<pre>タグ[]区切り記号を使用するなど)。

于 2013-05-27T03:40:45.623 に答える