2016-12-23 1 views
0

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

Этот динамический SQL создаст объект SQL, поэтому я не могу его параметризовать и выполнить его с помощью sp_executesql.

Есть ли какая-нибудь функция SQL, которая проверит переменную параметра хранимой процедуры и скажет, есть ли какие-то незаконные символы? Или удалить их или список этих символов?

Что-то вроде

DECLARE @variable = 'password OR 1=1' 

IF IsSqlInjectionPossible(@variable) 
BEGIN 
    RAISERROR('Illegal input characters',16,1) 
    RETURN 
END 

или

SET @variable = removePossibleSqlInjection(@variable) 

Как вы делаете это?

ответ

2

Есть ли какая-нибудь функция SQL, которая проверит переменную параметра хранимой процедуры и скажет, есть ли какие-то незаконные символы?

Там нет такой функции, и он просто не может быть

Просто потому, что нет никаких «символов, которые могут привести к SQL-инъекции». Все символы, используемые при инъекции, совершенно законны. Ваша идея SQL-инъекции неверна. Это не что-то чуждое запросу, как вирус или бактерии, а просто обычный SQL. Таким образом, все, что вы можете сделать, это запретить символы, которые используются в SQL-запросах, что позволит этой функции эффективно стереть ваш запрос.

Какой символ от 'password OR 1=1' заявление, которое вы считаете незаконным?

1

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

select public_details 
from users 
where ID = 5 

ID это значение, которое вы получаете от пользователя. Небезопасно вообще разрешать пользователям выбирать идентификатор, который они ищут, но не будем игнорировать это пока для примера. Теперь, если пользователь отправляет сообщение следующим образом:

5 or 1=1 

Нет никакого незаконного характера, даже апострофа. Поэтому проблема заключается в том, что это проблема бизнес-логики и ее необходимо решать на уровне приложений.

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