如果我是用户,我会转到用户页面,如果我是管理员,我会转到管理页面。这是我的代码
<?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;
}
?>
答案 0 :(得分:0)
我想在这里指出一些事情:
mysql_escape_string =&gt;你应该像Elias提到的那样使用PDO或mysqli。您可以阅读here
您的选择查询显示您没有用于检查用户是管理员还是仅用户的标志。您可以在表格中添加一个列,例如 is_Admin ,并为该字段存储值为1表示Admin,0表示其他用户。您应该在将用户输入表格时执行此操作。由于我发现您有 register.php 用于向系统注册用户,因此注册用户将设置为0,您需要为admin创建单独的注册(或硬编码db表行本身的条目,根据您的情况将特定用户的is_Admin设置为1)
完成第2步后,现在还要检查select语句中的is_Admin = 1。一旦这是真的,您将它们重定向到 adminhome.php 页面,但它看起来并不像您正在使用会话。您如何在 adminhome.php 页面中确定它是管理员。任何人都可以简单地输入 YOUR_URL / adminhome.php 来到这个地方吗?您需要一些基于角色的访问控制,解释为here
在 num_rows 的else语句中,仅因为找不到记录并不意味着密码错误。这可能会误导用户尝试登录。事实上,我认为系统不应该告诉用户他们的输入(用户名或密码)是不正确的。如果是不成功的登录尝试,请始终输出类似 &#34;不正确的用户名或密码&#34; 的内容我看到他们说的一些网站:用户名和Pasword不正确=&GT;如果两者都不正确。只是密码不正确(如果只是不正确)。我不明白为什么会这样做,但是这样你已经为黑客提供了帮助(如果是这样的话),取得了50%的成功,现在只需要尝试获取正确的密码。