这个存储过程对 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 所述,您的存储过程没有多大意义(如果有的话)。它可能会在维护噩梦中结束。
恕我直言,您根本不应该将存储过程用于简单的插入/更新/删除。
任何人都可以告诉我,这个存储过程可以避免 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 所述,您的存储过程没有多大意义(如果有的话)。它可能会在维护噩梦中结束。
恕我直言,您根本不应该将存储过程用于简单的插入/更新/删除。