2013-04-27 5 views
2

Я использую ASP.NET, C# и MS SQL, я создал страницу построителя правил, которая позволяет пользователям создавать сложные правила. Эта страница строит то, что приходит после предложения «Где» в вызове SQL, но страница правил не может создавать подзапросы, порядок операций или другие действительно сложные предложения.Предотвращение SQL-инъекции без параметризованных запросов?

Мы хотим дать возможность продвинутым пользователям редактировать этот оператор, но мы хотим остановить атаки SQL-инъекций, которые могут выполнять вредоносный код. Нам все равно, хотят ли они поставить 1 = 1, мы действительно заботимся о том, чтобы они пытались вызвать процедуры обновления/удаления/хранения и т. Д. Таким образом, все, что угодно в MS SQL, которое может прийти после предложения where, справедливо.

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

Where Org in (Select Org from AnotherTable Where Manager in (1,2,3)) AND ((Person= 4 OR Level = 5) AND Entity between 5 and 10 or Entity = 15) 

Есть ли что-то такое, что есть или бесплатно, о чём можно подумать? Я видел один классный строитель правил, который позволяет это, но это более 2000 долларов.

+0

Можете ли вы добавить примеры того, что делает ваш строитель правил и как он работает прямо сейчас? Если вы просто позволяете продвинутым пользователям писать строку, которая объединяется с командой sql, вы обнаружите, что это будет потенциально болезненно для проверки. т.е.: как бы вы подтвердили, что кто-то написал «-», но не для того, чтобы прокомментировать строку кода? – rossisdead

+0

можете ли вы добавить несколько примеров? – ncm

+0

Сказав это, это очень сильно пахнет серьезным угрозой безопасности, ожидающей своего появления. – rossisdead

ответ

2

Действительно ли вам нужно дезинфицировать запрос или вы можете просто выполнить запрос как пользователь с ограниченными разрешениями, чтобы они не могли получить доступ к внутренним таблицам или выполнить операции с мутированием? Если вы хотите разрешить произвольно сложные запросы SELECT, тогда может быть достаточно разрешений. Однако, в зависимости от вашей среды, вам все равно придется учитывать другие типы атак, например повторенную «SELECT * FROM ReallyBigTable» как атаку типа DOS.

+0

Привет, Дэн, я подумал об этой опции и дал этой учетной записи доступ только для чтения. Это хорошая возможность. Спасибо – WillHart

+0

Это поможет вам в этом. Другими проблемами для адреса являются потенциальная потребность в разрешениях на уровне столбцов и необходимость защиты от отказа в обслуживании в результате неэффективных запросов. –

Смежные вопросы