SQL Инъекционные комментарии не работают должным образом? - PullRequest
0 голосов
/ 08 марта 2020

Следующая команда разрешает успешный вход в систему независимо от пароля:

SELECT * FROM users WHERE username = 'eve'-- and password = 'asdasdasd';

Поскольку она игнорирует все после "-"

Но следующая команда не:

SELECT * FROM users WHERE username = 'eve'--' and password = 'asdasdasd';

по какой-то причине из-за дополнительного апострофа при использовании sql инъекции, генерируемой из следующей команды SQL:

"SELECT * FROM users WHERE username = '" + username + "' and password = '" + password + "';"

и с использованием следующих входных данных:
имя пользователя: eve '-
пароль: asdasdasd


Почему должно быть важно, чтобы после комментария был один апостроф оператор ??? И какой будет правильный ввод, чтобы он игнорировал все остальное?

Спасибо

1 Ответ

0 голосов
/ 08 марта 2020

После символов -- должен быть пробел, по крайней мере, в MySQL.

https://dev.mysql.com/doc/refman/8.0/en/ansi-diff-comments.html говорит:

Стандарт SQL использует «-» в качестве последовательности начального комментария. MySQL Сервер использует # в качестве начального комментария. MySQL Сервер также поддерживает вариант стиля комментария --. То есть за последовательностью начального комментария -- должен следовать пробел (или управляющий символ, такой как перевод строки). Место необходимо для предотвращения проблем с автоматически сгенерированными SQL запросами, использующими такие конструкции, как следующие, в которые мы автоматически вставляем значение платежа для платежа:

UPDATE account SET credit=credit-payment 

Рассмотрим, что произойдет, если платеж имеет отрицательное значение, например -1:

UPDATE account SET credit=credit--1 

credit--1, является допустимым выражением в SQL, но -- интерпретируется как начало комментария, часть выражения отбрасывается. Результатом является утверждение, которое имеет совершенно другое значение, чем предполагалось:

UPDATE account SET credit=credit 

Оператор не производит никакого изменения в стоимости вообще. Это показывает, что разрешение комментариев начинаться с -- может иметь серьезные последствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...