Запрос о внедрении SQL на веб-страницах
Предположим, у вас есть веб-страница, требующая ввода имени пользователя и пароля для аутентификации.
Имя пользователя "abs" и пароль "1234abcd" - вы получаете вход в свой профиль.
Но мой вопрос: почему, если я ввожу "abs '-" в поле имени пользователя и не пароль, он все равно возвращает страницу моего профиля?
Что происходит за кулисами с сервером, SQL и пользователем?
Я просто не могу понять это. Спасибо, ребята, за любую помощь.
1 ответ
Вы, очевидно, подставляете параметры в строку SQL, не экранируя их. Код предположительно выглядит примерно так:
$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
Итак, после того, как ваши входные данные заменены, результат:
SELECT * FROM users WHERE username = 'abs' --' AND password = ''
Цитата в имени пользователя, которое вы ввели, завершает строку. Тогда --
начинает комментарий, поэтому остальная часть запроса игнорируется. Итак, вы преобразовали запрос просто:
SELECT * FROM users WHERE username = 'abs'
и он больше не проверяет пароль.