Ограничить SQL-запрос на операцию SELECT ASP.net C # - PullRequest
0 голосов
/ 03 мая 2018

Мы создаем пользовательский интерфейс для пользователей
1) Выполнить операторы Select в базе данных (запрос может включать в себя присоединение или подзапрос)
2) Посмотреть результат на том же экране

В данный момент мы проверяем, имеет ли входная строка любое из следующих ключевых слов INSERT / UPDATE / DELETE / TRUNCATE / CREATE / ALTER / DROP / GRANT / REVOKE, а также выполняем запрос под пользователем SQL, который имеет только разрешение SELECT для БД.

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

Спасибо

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

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

Вам необходимо создать 2 входа в базу данных. Нужно просто иметь разрешение db_datareader, которое следует использовать для выполнения запросов. В вашем коде обработайте SqlException, чтобы увидеть, пытался ли конечный пользователь выполнить другой оператор, кроме выбора.

Должен быть другой логин базы данных, который код приложения должен использовать для выполнения любой другой операции DML.

0 голосов
/ 03 мая 2018

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

0 голосов
/ 03 мая 2018
  1. Убедитесь, что параметры используются для ввода данных для выбора операторы (избегайте SQL-инъекций). Хотя пользователь только с SELECT разрешение в любом случае не сможет выполнить, но это также убедитесь, что вход в здравом уме.
  2. Убедитесь, что любая база данных связана ошибки не выводятся прямо на экран
...