2016-04-07 1 views
0

現在、ユーザーのログイン試行回数を更新するlogin_countという名前のフィールドがあります。そのデータを取得して、ユーザーが数分間待ってから再度ログインできるようにするには、if elseステートメントをどのように作成しますか?ユーザーは3回のログイン試行後に数分待つ必要があります

function login_check(){ 

     if($_SERVER['REQUEST_METHOD']=='POST'){ 
      include "config.php"; 
      $conn = mysqli_connect($host,$user,$pass,$db); 

      if(mysqli_connect_errno($conn)){ 
       echo "Error in DB"; 
      }else{ 
       // echo "OK"; 
      } 
      $sql="SELECT * FROM login_details 
        WHERE username='".$_POST['username']."' AND 
        password='".md5($_POST['password'])."'"; 

      //execute the query 
      $result= mysqli_query($conn,$sql); 
      //display result    

      if (mysqli_num_rows($result)>0){ 
       //username and password are correct 

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

       $qry = "UPDATE login_details SET login_count = 0 WHERE username = '".$_POST['username']."'"; 
       $rslt = mysqli_query($conn,$qry); 

       header("Location: accessnow.php?action=loggedin&username=$username"); 

      } 
      else{ 
       //username and password are wrong 
       // on failed login attempt: 

       $query1 = "UPDATE login_details SET login_count = login_count + 1 WHERE username = '".$_POST['username']."'"; 
       $res = mysqli_query($conn,$query1); 

       $query2 = "SELECT login_count WHERE username = '".$_POST['username']."'"; 
       $query2_result = mysqli_query($conn,$query2);     

       if($query2_result >= 3) 
        { 
        // SHOULD SHOW AN ALERT 
        echo '<script> alert("You have 3 login attempts")</script>'; 
        }      

       echo '<script> alert("Username and Password did NOT match")</script>'; 

      } 
     } 
     else{ 
      //DISPLAY THE LOGIN FORM 
     } 

} 
+0

ログインの試行回数とループ内に条件を追加します。「sleep(time_in_seconds);」を使用して分の遅延を追加します。 –

+0

これをチェックしてください - http://stackoverflow.com/questions/679756/limiting-user-login-attempts -in-php ---------- http://stackoverflow.com/questions/14035845/how-to-blocked-login-a-few-minutes-after-3-unsuccessful-login --- --------- http://webcheatsheet.com/php/blocking_system_access.php –

+0

準備文を使用するようにクエリを変更してください。あなたのクエリが今構築されている方法により、誰でもSQLインジェクションを通じてパスワードなしでアクセスすることができます。 – Gordon

答えて

0

特定のIPアドレスからのログイン試行回数を格納するテーブルを作成できます。 1つの登録ユーザーに関する 情報が格納されているテーブルと 失敗したログイン試行がリストされている他の1:テーブル構造は、承認ページは二つのテーブルで動作するはず

CREATE TABLE `LoginAttempts` 
(
`IP` VARCHAR(20) NOT NULL , 
`Attempts` INT NOT NULL , 
`LastLogin` DATETIME NOT NULL 
) 

、このようにすることができます。

入力したデータを確認する前に、ユーザーが試行制限を超過しているかどうかを確認する必要があります。 LoginAttemptsテーブルに1つのIPアドレスに対応する2つ以上のレコードがある場合、一定期間アクセスがブロックされたというエラーメッセージが表示されます。

0

特定のセッションで3回試行が失敗した場合、セッションを試行してログインできないようにセッションに結びつけるのが最善の方法です。一部のISPはすべてのページリクエストで新しいIPをユーザーに発行する可能性がありますAOLがそれをやっていた)。あなたがIPアドレスに基づいている場合、ハッカーはロックアウトされた試行回数を試してから取り除き、多くの試行の後に新しいIPアドレスを取得するように戦術を調整するかもしれません。

また、md5ジェネレータは虹がタイル状になっていて、効果的に役に立たなくなっています。 PHPのバージョン5.5以降では、パスワードのハッシングを処理するための関数が組み込まれています。

関連する問題