Я читал об SQL-инъекции, поэтому я попробовал его на своем сайте, и, конечно, это сработало. Я знаю, что решение — это параметризованные запросы, и я также знаю, что существует множество примеров, но ни один из них не упоминает ту часть, где мы подключаемся к базе данных.
Итак, вот часть PHP-кода моей страницы входа в систему:
$userName = $_POST["username"];
$userPass = $_POST["password"];
$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";
$result = mysqli_query($dbc, $query); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db)
$row = mysqli_fetch_array($result);
if(!$row){
echo "No existing user or wrong password.";
}
Я долго искал решение, но я просто не мог понять, как я могу заставить его работать параметризованным способом. Не могли бы вы помочь мне, как я должен завершить мой код, чтобы предотвратить внедрение SQL?
Ну вот
$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, "s", $userName);
mysqli_stmt_bind_param($stmt, "s", $userPass);
mysqli_stmt_execute($stmt);
$row = mysqli_stmt_fetch($stmt);
Как примечание, я бы порекомендовал зашифровать ваш пароль или лучше использовать хеш для безопасности, не рекомендуется хранить пароль в виде простого текста.
использовать:
$userPass = mysqli_real_escape_string($mysqli,$_POST["password"]);
Это блокирует вещь » или ‘=’ вещь :), где $ mysqli — это ваша строка соединения ofc.