«Не могу обработать запрос», имея дело с базовыми параметризованными запросами - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь найти что-то, что нашел в Интернете (крайне плохо знакомый с этим), и ничего из этого не работает.Это какой-то случайный научный проект, о котором я решил узнать больше, но я застрял во второй части «процедур».https://www.sciencebuddies.org/science-fair-projects/project-ideas/Cyber_p008/cybersecurity/sql-injection#procedure

Я смотрел видео, но оно состоит только из идентификатора пользователя, а не имени пользователя и пароля.ПРИМЕЧАНИЕ. Только код, относящийся к login.php, вызывает проблемы.

<?php
include("global.php");
include("db.php");

session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST") {

  // username and password are sent in the form 

  $username = $_POST['username'];
  $password = $_POST['password']; 

  // Check if the username and password exist in the database

  $sql = "SELECT username FROM users WHERE username = '$username' AND password = '$password'";
  $stmt = msqli_stmt_init($db);
  if (!mysqli_stmt_prepare($stmt, $sql)) {
    echo "SQL Statement Failed";
  } else {
      mysqli_stmt_bind_param($stmt, "ss", $username, $password );
  mysqli_stmt_execute($stmt);
   $result = mysqli_stmt_get_result($stmt);
   $row = mysqli_fetch_array($result, MYSQLI_ASSOC);

   $count = mysqli_num_rows($result);}
  // If username and password matched then there is one row in the result

  if ($count != 0) {
     $_SESSION['login_user'] = strtolower($username);

     header("location: search.php");
  }
  else {
     $error = "Your Username or Password is invalid";
  }

}?>

Он должен был предотвратить базовую атаку "или" = ", но эторешил не работать полностью.

1 Ответ

0 голосов
/ 19 февраля 2019

Если вы используете параметры запроса - что, безусловно, является хорошей идеей - вы должны оставить заполнители в своем запросе.Используйте ? в качестве заполнителя.

Примерно так:

$sql = "SELECT username FROM users WHERE username = ? AND password = ?";

Позже вы свяжете переменные с этими параметрами.Вы должны связать то же количество переменных, что и количество заполнителей параметров.

Вы получили ошибку, которую вы описали, потому что пытались привязать переменные к запросу, в котором не было заполнителей параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...