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

Is this Stored Procedure is safe from 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

是的。 SQL 注入是完全安全的。 只要你把每一个值都参数化了,就是安全的。

但是,正如 JonH 所述,您的存储过程没有多大意义(如果有的话)。它可能会在维护噩梦中结束。

恕我直言,您根本不应该将存储过程用于简单的插入/更新/删除。