2009-03-02 3 views
1

私はMS SQL 2005のためにC#でアセンブリを作成しています。このアセンブリはストアドプロシージャを作成し、ストアドプロシージャに渡されたパラメータに基づいて動的クエリを実行します。C#アセンブリインジェクションチェック

SQLインジェクションを防ぐためにC#に単純な関数がありますか?この質問は、標準的なクエリに対して答えた...しかし、私はチェック注射用C#で使用することができますどのような本当に動的なクエリを構築するの周りに方法がない状況でた

string myQuery = "SELECT * FROM dbo.MyTable WHERE lastName = '" + injectionCheck(arg1) + "'"; 

例えば

?例えば

、これらはおそらく文句を言わない仕事:

@DbNameを使用して、

SELECT * @table

FROM OPEN SYMMETRIC KEY @keyName

など

答えて

7

利用バインドパラメータ:

SqlCommand cmd = new SqlCommand(myQuery, conn); 
cmd.Parameters.Add("@lastname", SqlDbType.NVarChar, 10, lastName); 
+0

これは標準的なクエリでは機能しますが、この方法を使用できないテーブル名や別の状況で使用する必要がある場合はどうすればよいでしょうか? –

3

使用パラメータ....

(このすでによく投稿されています)

string myQuery = "SELECT * FROM myTable WHERE lastname = @p_name"; 

SqlCommand cmd = new SqlCommand(); 
cmd.CommandText = myQuery; 
cmd.Parameters.Add ("@p_name", SqlDbType.Varchar).Value = "melp";