Страница входа не предотвращает неправильные имена пользователей - PullRequest
0 голосов
/ 03 марта 2020

У меня есть форма с только именем пользователя, которая позволит получить доступ к двум страницам в зависимости от уровня полномочий пользователя в базе данных 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");
  }
 }
}

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Вы объявляете только эту переменную:

$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, использовать подготовленный оператор:

0 голосов
/ 03 марта 2020

все, что вы заполните, заставит isset ($ _ POST) вернуть true. Как только вы попадаете в блок if-then, любой выбор ведет на страницу.

Как насчет:

if(isset($_POST) && $userExists)
{
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...