MySQL Имя таблицы Инъекция в JAVA - PullRequest
0 голосов
/ 13 марта 2019

У меня есть необходимость генерировать таблицы в базе данных во время выполнения.
Я не могу использовать prepareStatement в этом случае.

Я попытался найти библиотеку для проверки запроса или ввода tableName для MySQL , но нашел только ESAPI , который может только Побег моя строка. У меня есть свой собственный валидатор для него, но я знаю, что не могу быть уверен в этом.

Я прочитал много примеров, как злоупотреблять SQL-инъекцией. Но обычно ресурсы дают примеры для параметров, а не для имени таблицы. И как я понимаю это возможно в случае, когда параметр находится в конце запроса.

Вопрос 1 : Не могли бы вы привести пример, как злоупотреблять этими запросами?

"CREATE TABLE " + tableName + "(id int primary key)"

или

"DROP TABLE " + tableName

tableName - ввод от клиента

Это может быть очень полезно для проверки моего валидатора. Когда я пытаюсь это сделать, у меня всегда возникает ошибка синтаксиса SQL.

Вопрос 2 : Обычно они используют тактику, когда необходимо использовать некоторый символ как, 'или что-то подобное, и после того, как они пишут свой запрос. Для этой тактики нужно использовать пробелы.

Можно ли вставить SQL-инъекцию в ввод, который не может содержать пробелы? есть только буквы? Может ли подчеркивание быть символом, прерывающим запрос?

UPDATE

Если было бы безопасно добавить escape-char перед подчеркиванием в "firstname_lastname"?

1 Ответ

1 голос
/ 13 марта 2019

Я бы рекомендовал не делать этого, но если вам нужно, комментарий Майкла Бучера довольно хорош.Вы можете обойти пробелы, используя что-то вроде табуляции или %00 %09 /**/ %0d %0a в зависимости от реализации базы данных.

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