首页 > 解决方案 > 登录页面不能阻止无效的用户名

问题描述

我有一个只有用户名的表单,它允许访问两个页面,具体取决于 MS SQL 数据库中的用户权限级别。

如果他们的权限级别是 10,那么他们将登录到“普通”页面,但如果再多一点,他们将登录到具有更多功能的管理页面。这一切都很好,但是它允许输入用户名的任何内容登录。

我正在努力阻止它登录任何不在数据库中的用户名。这是我目前所拥有的......

$conn = odbc_connect(database connection stuff here);
$login = $_POST['login'];
$sqlquery = "SELECT u.authorityLevel, u.employeeNo, e.knownAs FROM common.dbo.users as u JOIN 
common.dbo.employees AS e on e.employeeNo = u.employeeNo WHERE u.employeeNo = '".$login."'";
$result = odbc_exec($conn, $sqlquery);
$user = odbc_fetch_array($result);
$userExists = odbc_num_rows($sqlquery);

if((isset($_SESSION['login']['logged_in']) && $_SESSION['login'] 
['logged_in'])==true){

if(isset($_POST)){
  if ((int)$user['authorityLevel'] > 10) {
    header("location: indexAdmin.php");
    $row = $user;
    $_SESSION['sessionUserName'] = $row['knownAs'];
} elseif ((int)$user['authorityLevel'] = 10) {
    header("location: confirmedJobs.php");
    $row = $user;
    $_SESSION['sessionUserName'] = $row['knownAs'];
} else ((int)$user['authorityLevel'] < 10){
    header("location: loginPage.php");
  }
 }
}

标签: phpsql-serversessioninput

解决方案


你只是声明这个变量:

$userExists = odbc_num_rows($sqlquery);

但不使用它。

这是检查记录是否存在的语法:

 if($userExists >0) {...}

编辑:(我忽略了一些东西)。

此行使用了错误的变量:

$userExists = odbc_num_rows($sqlquery);

和这个结合:

$result = odbc_exec($conn, $sqlquery);

因此它应该读作:

$userExists = odbc_num_rows($result);

odbc_num_rows()用于执行的查询,而不是原始查询。

您也可以使用 SQL 注入,使用准备好的语句:


推荐阅读