php - 登录页面不能阻止无效的用户名
问题描述
我有一个只有用户名的表单,它允许访问两个页面,具体取决于 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");
}
}
}
解决方案
你只是声明这个变量:
$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 注入,使用准备好的语句:
推荐阅读
- c# - 为什么MVVMLight的RelayCommand使用WeakAction
- python-3.x - 如何在python中连接两个直方图
- javascript - Accessing nested object
- java - DB连接重置是因为Oracle DB中的参数?
- c++ - 如何从另一个类编辑 QMainWindow UI 小部件?
- angular5 - Angular 5短路显示不同组件的路线
- r - 大写基本方向,对 R 中的所有其他内容使用标题大小写
- angular - 来自带有 ViewChild 的代码的 Angular 5 触发事件
- javascript - 为mysql数据库实现密码散列
- node.js - 无法安装 Cordova 网络插件