2017-01-12 1 views
0

У нас есть функция, которая позволяет пользователям фильтровать список с помощью оператора sql.Есть ли инъекционная атака с предоставленным пользователем подзапросом для предложения where in?

Прилагаемый пользователя заявление по существу, используется как:

select * from table where id in (subquery) -- where subquery is given by the user 

Я пытался дать ему ); delete from table; -- и delete from table returning id, но безрезультатно. Любые другие возможности? Я не беспокоюсь о том, что пользователь видит данные, и они не могут получить доступ в противном случае.

+0

'1); удалить из таблицы; - ' – GSerg

+0

Да, если исходный подзапрос интерполирован со строкой SQL, уязвимой для инъекции. Правильно очистите пользовательский ввод, и это не будет проблемой. –

+0

@GSerg Спасибо, что «работал». –

ответ

0

Ваши вопросы являются взаимоисключающими, в связи с тем, что вы спутать инъекции с конкретным эксплуатируют.

Есть ли инъекционная атака с предоставленным пользователем подзапросом для пункта where in?

Да, конечно. Способность вводить произвольный код SQL - это именно то, что представляет собой SQL-инъекция.

Я пробовал давать его); удалить из таблицы; - и удалить из возвращаемого идентификатора таблицы, но безрезультатно.

В большинстве случаев этот конкретный запрос не будет работать.

Любые другие возможности?

Да, конечно. В основном, если пользователь видит данные, они не могут получить доступ в противном случае.

Я не беспокоится о пользователе видящих данных

Так сделать свой ум: делать ли вы уход для инъекций SQL в целом или только для конкретного подмножества.

+0

Обычно они видят всю таблицу. Подзапрос позволяет фильтровать строки. –

+0

Это не о том, чтобы видеть только таблицу, но иметь доступ для чтения ко всей базе данных. –

+0

Как это работает в подзапросе? Единственная часть, которая предоставляется пользователю, является частью подзапроса. Тогда я не думаю, что это может привести к утечке данных. –