2017-06-23 36 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。 –