2017-06-23 34 views
1

我有一个动态构建的SQL,如下所示。我的问题是,是否容易受到SQL注入?如果是的话,我应该如何解决它?带有LIKE子句和SQL注入的SQL Server动态SQL

--search title only  
if @SearchType =2  
BEGIN  
    SET @strSQL = @strSQL + 'AND (IDownload.FileTitle LIKE ''%'[email protected]+'%'' ) '  
END  
+3

是的,它可以通过对动态SQL使用适当的参数化来解决(例如,使用带@search的sp_executesql作为参数)。 – ZLK

+0

@ZLK如果我的服务器端代码(c#)已经在使用正确的参数化和准备好的语句,我的SQL Server代码仍然很脆弱? –

+0

是的,由于当前语句的写法,它仍然很脆弱。 – ZLK

回答

1

是,检查:

CREATE TABLE Test (Id int) 
GO 

CREATE TABLE IDownload (FileTitle nvarchar(100)) 

DECLARE @strSQL nvarchar(max) 
DECLARE @Search nvarchar(max) = 'a'') DROP TABLE Test --' 

SET @strSQL = 'SELECT 1 FROM IDownload WHERE 1 = 1 ' 

SET @strSQL = @strSQL + 'AND (IDownload.FileTitle LIKE ''%'[email protected]+'%'' ) '  

PRINT @strSQL 
EXEC sp_executesql @strSQL 

DROP TABLE IDownload 

我可以删除表Test经过特殊字符串@Search。使用sp_executesql程序和参数重写您的代码。

+0

但是,我应该如何将类似声明改写为SQL注入证明?我一直在寻找互联网,所有的例子似乎都与你发布的相似。我已经在我的代码中使用了sp_executesql和paramdefinition。 –