Запрос о внедрении 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'

и он больше не проверяет пароль.

Другие вопросы по тегам