Предотвратить инъекцию - избежать сырого SQL - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть приложение (Crystal Reports), которое вставляет параметры пользователя непосредственно в выполняемый запрос.

Характер запросов, которые мне нужно выполнить, означает Я не могу изменить это поведение.

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

Например, мой запрос SQL выглядит примерно так:

declare @text varchar(100)
set @text = '{users parameter}'

select *
from blah
where blah.field = @text
-- rest of query

Поэтому, если пользователь установит параметр на '; select * from blah; --, он выполнит этот запрос.

Я уже запускаю команду от имени очень ограниченного пользователя, но все еще хочу попытаться предотвратить инъекции.

Есть ли способ предотвратить или хотя бы смягчить их с помощью выполняемого мной запроса?

Что-то вроде:

declare @text varchar(100)
set @text = NeverEscape('{users parameter}')

select *
from blah
where blah.field = @text
-- rest of query

Редактировать

Чтобы выяснить, какова уязвимость, приложение передает один текстовый запрос на сервер, в приведенном мной примере на сервер будет передан следующий запрос:

declare @text varchar(100)
set @text = ''; select * from blah; --'

select *
from blah
where blah.field = @text
-- rest of query
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...