У меня есть простая форма входа в систему, которая запускает скрипт jQuery, который отправляет запрос на PHP (ajax), а затем возвращает true, если вход в систему прошел успешно.
Мои 2 вопроса будут основаны на безопасности.
Я отправляю данные через ajax следующим образом:
$.ajax({
type: "POST",
url: "../Php/CheckUserLogin.php",
data: {"userName" : userName, "password" : password},
success: function(result){
switch(result)
{
case "0":
document.getElementById('errorMessage').innerHTML = "Uspesno ste se ulogovali!";
document.getElementById('errorMessage').style.color = "green";
break;
case "NEPOSTOJECI_KORISNIK":
document.getElementById('errorMessage').innerHTML = "Korisnik ne posotoji!";
document.getElementById('errorMessage').style.color = "red";
break;
case "-1":
case "1":
document.getElementById('errorMessage').innerHTML = "Pogresna sifra!";
document.getElementById('errorMessage').style.color = "red";
break;
default:
document.getElementById('errorMessage').innerHTML = "Greska!";
document.getElementById('errorMessage').style.color = "red";
break;
}
}
});
input filtering перед отправкой на мой PHP (я проверяю, пусты ли строки)?В PHP я создаю такой оператор sql: $sql = "SELECT SIFRA FROM KORISNIK WHERE IME = '$input_Username'";
parameters в sql - c#?Можете ли вы показать код CheckUserLogin.php?






вы должны использовать {$ input_Username} в строках, это более читабельно. отправлять запросы ajax - это нормально, и вам следует проверить свои строки.
$sql = "SELECT SIFRA FROM KORISNIK WHERE IME = {$input_Username}";
Нет, он не должен этим пользоваться. И по гораздо более важным причинам, чем удобочитаемость.
ну, запрос ajax можно очистить, так как для начала это хорошо. благодаря этому он узнает, как защитить сайт от XSS.
Продвигать код db, уязвимый для sql-инъекции, здесь - плохая вещь.
«и вы должны проверить свои строки». Если вы имеете в виду JavaScript, как следует из вопроса, это не влияет на безопасность.
Что касается проверки на стороне клиента, вам решать, что вы хотите проверить.
Что касается бэкэнда. Вы определенно никогда не должны использовать этот код, если вам не нужны данные в вашей базе данных.
Вы должны использовать подготовленные операторы, если используете PDO или mysqli, чтобы вы могли связывать параметры.
$sql = "SELECT SIFRA FROM KORISNIK WHERE IME = :input_username";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':input_username', $input_username);
http://php.net/manual/en/pdo.prepared-statements.php
http://php.net/manual/en/mysqli.prepare.php
Не забывайте, что вам нужно выполнить запрос.
Пользователи могут отправлять на ваш сервер все, что им нравится, поэтому фильтрацию ввода следует использовать только для удобства использования (отображение ошибок для пользователей без предварительной отправки их на сервер). Вы должны делать проверки на стороне сервера. По последнему вопросу: вы уязвимы для SQL-инъекции. См. Как я могу предотвратить SQL-инъекцию в PHP?. (Но вы не должны задавать более одного вопроса за раз на Stack Overflow.)