如何确定我是用户还是管理员?

时间:2016-09-16 15:21:26

标签: php

如果我是用户,我会转到用户页面,如果我是管理员,我会转到管理页面。这是我的代码

  <?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;
     }
     ?>

1 个答案:

答案 0 :(得分:0)

我想在这里指出一些事情:

  1. mysql_escape_string =&gt;你应该像Elias提到的那样使用PDO或mysqli。您可以阅读here

  2. 您的选择查询显示您没有用于检查用户是管理员还是仅用户的标志。您可以在表格中添加一个列,例如 is_Admin ,并为该字段存储值为1表示Admin,0表示其他用户。您应该在将用户输入表格时执行此操作。由于我发现您有 register.php 用于向系统注册用户,因此注册用户将设置为0,您需要为admin创建单独的注册(或硬编码db表行本身的条目,根据您的情况将特定用户的is_Admin设置为1)

  3. 完成第2步后,现在还要检查select语句中的is_Admin = 1。一旦这是真的,您将它们重定向到 adminhome.php 页面,但它看起来并不像您正在使用会话。您如何在 adminhome.php 页面中确定它是管理员。任何人都可以简单地输入 YOUR_URL / adminhome.php 来到这个地方吗?您需要一些基于角色的访问控制,解释为here

  4. num_rows 的else语句中,仅因为找不到记录并不意味着密码错误。这可能会误导用户尝试登录。事实上,我认为系统不应该告诉用户他们的输入(用户名或密码)是不正确的。如果是不成功的登录尝试,请始终输出类似 &#34;不正确的用户名或密码&#34; 的内容我看到他们说的一些网站:用户名和Pasword不正确=&GT;如果两者都不正确。只是密码不正确(如果只是不正确)。我不明白为什么会这样做,但是这样你已经为黑客提供了帮助(如果是这样的话),取得了50%的成功,现在只需要尝试获取正确的密码。

相关问题