是否将SQL参数传递给存储过程本身确保SQL注入不会发生或类型检查也需要执行?参数类型未设置时SQL注入是否可能?
作为一个例子 -
ADO.NET代码:
Database DBObject = DataAccess.DAL.GetDataBase();
DbCommand command = DBObject.GetStoredProcCommand("usp_UpdateDatabase");
List<DbParameter> parameters = new List<DbParameter>();
parameters.Add(new SqlParameter("@DbName", txtName.Text));
parameters.Add(new SqlParameter("@DbDesc", txtDesc.Text));
command.Parameters.AddRange(parameters.ToArray());
rowsAffected = DBObject.ExecuteNonQuery(command);
SP:
ALTER PROCEDURE [dbo].[usp_GetSearchResults]
-- Add the parameters for the stored procedure here
@DbName NVARCHAR(50) = ''
,@DbDesc NVARCHAR(50) = ''
AS
BEGIN
SET NOCOUNT ON;
SELECT [RegionName]
,[AppName]
FROM [ApplicationComponent]
WHERE [DBName] LIKE ('%' + @DbName+ '%')
OR [DBDesc] LIKE ('%' + @DbDesc+ '%')
END
在上面的代码中,我还没有提到的任何参数类型或验证逻辑。它仍然会抢占SQL注入?
感谢您的指导!
+1对于一个重要的问题。 – Teekin 2010-08-17 13:48:06
^^非常感谢..相信我,我很犹豫发表这个问题,觉得它太愚蠢了基本上要问这个问题.. :) – Dienekes 2010-08-17 13:50:07