2016-09-16 5 views
0

私はユーザーのページに行き、私が管理者の場合は管理ページに行きます。ここに私のコードは私はユーザーか管理者かを判断する方法は?

<?php 
    require('config.php'); 

    if(isset($_POST['submit'])) 
    { 
     $uname = mysql_escape_string($_POST['uname']); 
     $pass = mysql_escape_string($_POST['pass']); 
     $pass = md5($pass); 

     $check = mysql_query("SELECT * FROM `user` WHERE `uname` = '$uname' AND `pass` = '$pass'"); 
     if(mysql_num_rows($check) > 0){ 
     header("Location: adminhome.php"); 

     } 
     else{ 

     echo "Wrong password"; 
     } 
    } 
    else{ 

     $form = <<<EOT 
     <form action="login.php" method="POST"> 
    <p>Doesn't have an account yet? </p> 
    <title>Login</title> 
      <p align ="left"><a href="register.php">Register</a></p> 
    <center> 
     Username: <input type="text" name="uname"><br> 
     Password: <input type="password" name="pass"><br> 
     <input type="submit" name="submit" value="Log in"> 

    EOT; 

    echo $form; 
    } 
    ?> 
+4

データベースフラグ 'isAdmin'を追加して確認してください。 –

+4

'mysql_escape_string' <== ***は、推奨されない' mysql'拡張子***を使用しないでください。それは年前に廃止され、PHP7から削除されました。代わりに 'PDO'または' mysqli'を使用してください。そして準備されたステートメントを使用します。 –

+0

テーブルにis_adminとchkという列を追加します。 – devpro

答えて

0

だ私はここにあなたに指摘したい事柄がいくつかあります:エリアスが述べたように

  1. mysql_escape_string =>あなたはPDOまたはmysqliのを使用することshoud。あなたはそれらについて読むことができますhere

  2. あなたの選択クエリは、あなたが管理者か単にユーザーかどうかをチェックするフラグがないように表示されます。 is_Adminのような列をテーブルに追加して、そのフィールドにAdminの値を1、他のユーザーの値を0にすることができます。これを行うには、ユーザーをテーブルに入力する必要があります。システムにユーザーを登録するにはregister.phpがありますので、ユーザーの登録には0が設定されています。管理者用に別の登録を作成する必要があります(または、dbテーブル行自体をハードコードして

  3. ステップ2を実行したら、selectステートメントでis_Admin = 1もチェックします。一度これが当てはまると、adminhome.phpページにリダイレクトされますが、セッションで作業しているようには見えません。どのようにあなたはadminhome.phpページでそれが管理者であることを確認していますか?誰でも簡単に入力できますYOUR_URL/adminhome.phpこの場所に来ていませんか?あなたは見つからなかったレコードは、パスワードが間違っていることを意味するものではありませんという理由だけで、NUM_ROWSのためにあなたのelse文では

  4. hereを説明されているいくつかの役割ベースのアクセス制御を必要とします。これは、ログインしようとしているユーザーを誤解させる可能性があります。実際、私はシステムがユーザの入力(ユーザ名またはパスワード)が間違っているかどうかを決して知らせてはならないという考え方に従います。ログイン試行に失敗した場合は、常に「不正なユーザー名またはパスワード」のようなものが出力されますユーザー名とパスワードは間違っています。パスワードだけが間違っています(それが間違っている場合)。私はそれがなぜそうなっているのか理解できませんが、あなたはすでに50%の成功率でハッカーに餌食を与えており、今は正しいパスワードを試してみるだけです。

関連する問題