2016-03-31 60 views
0

以下のコードはSQLインジェクションを受けやすいですか?私はこれまで、CommandBuilderはSELECT/UPDATE/INSERTコマンドを生成するときに常にパラメータ化されたクエリを使用しています。dataadapterです。 SQLインジェクションに脆弱性がありますか?

using (var dataAdapter = new SqlDataAdapter(selectCommand)) 
using (var cmdBuilder = new SqlCommandBuilder(dataAdapter)) 
{ 
cmdBuilder.ConflictOption = ConflictOption.OverwriteChanges; 

using (var dataset = new DataSet()) 
{ 


dataAdapter.UpdateBatchSize = 0; 
dataAdapter.AcceptChangesDuringFill = false; 
dataAdapter.AcceptChangesDuringUpdate = false; 

stopwatch.Start(); 
dataAdapter.Fill(dataset, "ABC"); 
dataset.AcceptChanges(); 
ds.tables[0].Rows["ABC"] = MALICIOUS SQL INJECTION ATTEMPT; // let's 
say this is where the end user could slip malicious string he wanted 
into 


dataAdapter.Update(dataset, " ABC"); 
} 
} 

答えて

0

CommandBuildersは、挿入、更新、および削除文を生成するときにパラメータ化されたクエリを使用します。だから、SQLインジェクション攻撃を受けることはありません。パラメータ化されたクエリでは、パラメータ・マーカを持つSQL文が解析され、次にパラメータが個別にプッシュされます。パラメータ内の値はSQLクエリパーサーによって解析されないため、コードパスには注入が発生する場所がありません。

もう一つの選択肢は、Entity FrameworkやDapperのような軽いもののようなORM(オブジェクトリレーショナルマッパー)を使用することです。

+0

だから私のコードはかなり安全ですか? – user6095165

+0

はい、コマンドビルダーを使用しています。 –

関連する問題