2017-06-23 18 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 

を私は@Searchで特別な文字列を渡すテーブルTestをドロップすることができます。 sp_executesqlプロシージャとパラメータを使用してコードを書き直します。

+0

しかし、私はlike文をSQL Injection proofであると言い換えるべきですか?私はインターネットを見てきましたが、あなたが投稿したものと似ているようです。私はすでに私のコードでsp_executesqlとparamdefinitionを使用しています。 –

関連する問題