Разве сканирование всей таблицы sql и сравнение каждой строки с пользовательским вводом занимает больше времени, чем выбор строки с данным именем пользователя? - PullRequest
0 голосов
/ 24 января 2019

Это мой первый вопрос в Stackoverflow, так что извините, если что-то не так.

Я начал изучать внутреннюю разработку несколько дней назад.
В настоящее время я работаю над приложением с возможностями входа в систему..

Из того, что я узнал до сих пор, я должен взять имя пользователя и пароль, а затем проверить, есть ли совпадение в базе данных, и если оно есть, я зарегистрирую этого человека.

Однако, чтобы защитить мое веб-приложение от потенциальных SQL-инъекций, мне нужно использовать подготовленные операторы или по крайней мере экранирующие строки при построении запросов.

Если я получаю пользовательский ввод, тогда я использую цикл for, чтобы получитьимя пользователя и пароль каждого пользователя и сравните их с пользовательским вводом, который пытается войти.
Казалось бы, это решает опасность внедрения SQL-кода, поскольку на сервер ничего не отправляется, только по сравнению с данными внутри сервера.

Этот подход намного медленнее или он открывает другие уязвимости?

Какой метод следует использовать, чтобы быть лучше и безопаснее?э?


Это код PHP, который я использую:

$r = "SELECT * FROM users";
$result = mysqli_query($con, $r);
$rows = mysqli_num_rows($result);
for ($i = 1; $i <= $rows; $i++){
    $checkQ = "SELECT * FROM users WHERE id = $i";
    $r = mysqli_query($con, $checkQ);
    $result = mysqli_fetch_assoc($r);

    if ((isset($_POST["username"])) && (isset($_POST["password"]))) {
        if (
            ($result["username"] == $_POST["username"])
            && ($result["password"]==$_POST["password"])
        ) {
            $_SESSION["username"] = $_POST["username"];
            mysqli_close($con);
            header("Location: home.php");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...