这个存储过程对SQL注入是否安全?

时间:2015-03-17 17:39:48

标签: c# sql-server sql-injection

有谁能告诉我,这个存储过程是否可以安全地从SQL注入?

我使用的是3层架构,只发送插入,更新和删除操作所需的参数。

如果这对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

1 个答案:

答案 0 :(得分:1)

是。 SQL注入非常安全。 只要您对每个值进行参数化,就是安全的。

然而,正如JonH所述,您的存储过程并没有多大意义(如果有的话)。它可能最终会成为维护的噩梦。

恕我直言,你根本不应该使用存储过程进行简单的插入/更新/删除。