Динамически генерируемые проблемы безопасности SQL (внедрение SQL и т. Д.) - PullRequest
1 голос
/ 31 января 2012

Мы находимся в процессе разработки «API» для одного из наших продуктов.Это позволит пользователю определить, какие столбцы они не хотят возвращать из своих «запросов», и мы создадим необходимый SQL.

Я знаю, что вы всегда должны использовать параметризованные запросы, чтобы избежать атак SQL-инъекций.Однако существуют ли угрозы безопасности при построении оператора, в котором возвращаемые столбцы определяются пользователями?Допустим, у нас есть следующий запрос API.Это просто пример, чтобы проиллюстрировать, что я имею в виду:)

/api/customers/getall?fields=Name,Phone,Email&where=Zip=1000

SQL будет

SELECT Name, Phone, Email FROM Customers WHERE Zip = @Zip

Я не думаю о том, чтобы просто взять параметр fields и построить SQL напрямуювокруг этого он, вероятно, будет преобразован в список и возвращен с некоторыми столбцами по умолчанию, такими как Id и Modified.

Что следует знать в этой ситуации?И как бы вы защитились от атак?

- Кристиан

Ответы [ 2 ]

0 голосов
/ 05 апреля 2013

Сначала я делаю запрос, чтобы получить поля выбранных таблиц из таблицы метаданных INFORMATION_SCHEMA.COLUMNS.

Запрос метаданных базы данных

Имена столбцов, извлеченные из базы данных, безопасны для использования. Затем я сравнил поля в предложении SELECT со «списком безопасных полей». Если одно из выбранных полей отсутствует в чистом списке, удалите его или вообще не запускайте сгенерированный SQL.

0 голосов
/ 31 января 2012

Создание хранимой процедуры

Это позволит вам проверить входные укусы, и вы должны быть в безопасности.

См: MSDN Создание хранимых процедур

...