0

crypt(); に問題があると思います。php 関数。エラーログにエラーは表示されません。

ログインページの認証に関しては、私は問題を抱えています。

   if( $page_mode == 'Login' )
{
require "globe.php";
    //simple post from below
    $username = htmlentities(trim($_POST['username']));
    $username = mysqli_real_escape_string($mysqli, $username);
    $password = trim($_POST['password']);
    $query = mysqli_query($mysqli, "SELECT * FROM Persons WHERE Username = '$username'");
    $row = mysqli_fetch_assoc($query);
    $numrows = mysqli_num_rows($query);
    $dbuser = $row['Username'];
    $dbpass = $row['Password'];
    $hashed_password = crypt($password, $dbpass);




    if( ($username == '') || ($password == '') ) {
        $error_string .= '<font color=red>You have left either the username or password field blank!</font>';
        }
    else if ($numrows == 0)
    {
        $error_string .= '<font color=red>No username can be found!</font>';
        }
    else if ($numrows == 1)
    {

       if ($password == $hashed_password)
       {
       $error_string .= '<font color=red>Details checked out</font>';
       }
    }
    else {
            $error_string .= '<font color=red>There was an error. Please contact an Admin</font>';

    }
}

ユーザー名とパスワードを入力してテストすると、エラー文字列は表示されません。

誰かがこれを解決できる場合は感謝します

usepassを使用したdbpassのチェックでのみエラーが発生し始めたことに言及する必要があります

4

1 に答える 1

1

あなたが持っている

$password = trim($_POST['password']);
$dbpass = $row['Password'];
$hashed_password = crypt($password, $dbpass);

if ($password == $hashed_password)

これにより、ログインフォームからのクリアパスワードとハッシュされたパスワードが比較されます。ただし、ハッシュ化されたパスワードをデータベースに保存されているハッシュ化されたパスワードと比較する必要があります。だから、これは

if ($hashed_password == $dbpass)

データベースには、ハッシュされたパスワードのみが保存されるためです。

デバッグの目的で、エコー$hashed_password$dbpassて、これが何がどのように間違っているかを確認する必要があります。Cryptまた、不適切な塩が与えられた場合、その陰窩は失敗する可能性があると述べています。返される文字列の長さは13文字未満になります。

于 2012-11-25T18:42:51.723 に答える