如何在插入记录时使用存储过程阻止SQL注入?

pro*_*011 4 c# sql asp.net sql-server-2005

我是SQL Server的新手,我正在尝试使用存储过程将记录插入表中,如下所示.

我想要一个使用以下存储过程的建议.也:

  • 我可以阻止SQL注入吗?
  • 这是正确的方法吗?

如果我错过了下面的过程导致SQL注入,请纠正我.

Create PROCEDURE [dbo].[spInsertParamTable]
   @CmpyCode nvarchar(50),
   @Code nvarchar(50),
   @DisplayCode nvarchar(50),
   @TotalDigit int,
   @Nos bigint,
   @IdentitY int OUTPUT
AS
BEGIN
   INSERT tblParamTable (CmpyCode, Code, DisplayCode, TotalDigit, Nos)
   VALUES (@CmpyCode, @Code, @DisplayCode, @TotalDigit, @Nos)
END

SELECT @Identity = SCOPE_IDENTITY();
RETURN @Identity
Run Code Online (Sandbox Code Playgroud)

Kyl*_*ale 7

SQL注入专门指将SQL代码注入现有的SQL查询,该查询通过字符串连接构建并动态执行.它几乎总是以下形式:

@dynamicSQL = "select * from sensitivetable where field = " + @injectableParameter
sp_executesql @dynamicSQL
Run Code Online (Sandbox Code Playgroud)

对于这个特定的存储过程,攻击者可以做的最糟糕的事情是将无用的值插入到tblParamTable中.

但是,如果稍后在动态构建的查询中使用这些值,那么这仅仅会成为二阶攻击:在第1页上插入值,请参阅第2页上的动态查询结果.(我只提到这个,因为你的表被命名为tblParamTable,建议它可能包含以供以后重用的参数.)