0

だから、これは私のコードです:

$login_user_name = $_POST['login-user-name'];
//salt is declared earlier
$login_user_pword = super_encrypt($_POST['login-user-pword'], $login_salt);     

$login_veri_query = mysql_query("SELECT * FROM zebra_users WHERE username='".$login_user_name."'");

$login_veri_numrows = mysql_num_rows($login_veri_query);

if ($login_veri_numrows != 0) {
    while ($value = mysql_fetch_array($login_veri_query)) {
        if ($value['password'] == $login_user_pword) {
            $login_error .= '<p class="success">Logged in Successfully!</p><br/>';
            $main_error .= '<p class="success">Logged in Successfully!</p><br/>';
            $login_good = true;
            $login_error .= '<script type="text/javascript"> <!-- window.location = "main.php" //--> </script>';
        } else {
            $login_error .= '<p class="warning">Incorrect password, try again.</p><br>';
        }
    }
}
}

また、ユーザー名が「user」でパスワードが「pword」のユーザーがいて、それらの資格情報がフォームに入力された場合、「検証」メソッドはパスワードが正しくないと主張します。

ここで何が問題なのですか?

また、これが実際には適切なログイン スタイルではないことはわかっていますが、Cookie を使用するまでは、これをプレースホルダーとして使用しています。

4

1 に答える 1

1

まず第一に、ユーザー名をエスケープしていないため、SQL インジェクションの影響を受けやすくなります。

次に、ハッシュ化されたパスワードをデータベースに送信し、ユーザー名とパスワードのハッシュが一致するユーザーを返す必要があります。そうすれば、間違ったパスワードを入力しただけでデータベースにパスワード ハッシュを強制的に送信させることができなくなります。

第 3 に、データベースから行が返されなかった場合はどうなるでしょうか。パスワードが失敗した場合のアクションは、ユーザー名が失敗した場合のアクションと同じである必要があります。

4 番目に、パスワードを比較するために === を使用する必要がありました (ただし、この方法を使用するべきではありません)。空のパスワードが FALSE などと一致することは望ましくありません。さらに、リソースを節約するだけです。

于 2013-02-28T03:56:52.700 に答える