2015-03-17 2 views
0

Может ли кто-нибудь мне сказать, безопасна ли эта хранимая процедура от SQL-инъекции?Эта хранимая процедура безопасна от SQL-инъекции?

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

Если это не безопасно от SQL-инъекции, то как я могу сделать его безопасным?

CREATE PROCEDURE [dbo].[spStudent] 
    @parmID int = null, 
    @parmName varchar(50) = null, 
    @parmClass int = null, 
    @parmSection varchar(1) = null, 
    @parmYear varchar(15) = null, 
    @parmIsActive bit = null, 
    @parmAction varchar(50) 
AS 
BEGIN 
    begin 
     if @parmAction = 'insert' 
      insert into tblStudent 
      values (@parmName, @parmClass, @parmSection, @parmYear, @parmIsActive) 
    end 

    begin 
     if @parmAction = 'update' 
      update tblStudent 
      set StdName = @parmName, 
       ClassID = @parmClass, 
       Section = @parmSection, 
       Year = @parmYear, 
       IsActive = @parmIsActive 
      where StdID = @parmID 
    end 

    begin 
     if @parmAction = 'delete' 
      delete from tblStudent 
      where StdID = @parmID 
    end 
END 
+7

Почему у вас есть общая хранимая процедура, которая принимает тип действия? У вас должны быть отдельные sprocs для вставки/обновления/удаления, чтобы сделать вашу жизнь проще. Подумайте о том, что произойдет, когда вы начнете строить это, это может стать кошмаром для поддержания. Говорить что-то не страдает от какого-то взлома, рискованно, почти все может быть взломано. Похоже, вы используете параметры для передачи в sproc, и эти данные как-то проверены на стороне клиента/сервера, чем нет, у вас не будет SQL-инъекции. Но вам нужно отделить это. – JonH

+0

Я согласен с JonH. Это не имеет никакого смысла. –

+0

StoredProcedure - все это кошмар для поддержания. Для простых запросов, подобных приведенным выше, в вашей программе более чем достаточно (предупреждение: opionions, мнения) – Steve

ответ

1

Да. Это абсолютно безопасно от SQL Injection. До тех пор, пока вы настроили каждое значение, оно безопасно.

Однако, как также указано JonH, ваша хранимая процедура не делает много (если есть) смысла. Вероятно, это закончится кошмаром для обслуживания.

IMHO, вы не должны использовать хранимые процедуры вообще для простых вставок/обновлений/удалений.

+0

пояснение для downvote будет оценен. ура –

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