2011-07-19 11 views
1

私はcommandnameとcommandargumentを使ってソート(フィールドと方向)を制御しています。 SQLインジェクションからのviewstateの安全性.net viewstateはSQLインジェクションから安全ですか?

+0

あなたは、SQL文のコードを投稿してくださいことはできますか? –

+0

これらのコマンド名や引数をクライアントに送信している場合は、そのデータがSQLとして実行される前にそのデータをサニタイズするだけで問題ありません(もちろんそうだとしたら) –

答えて

0

:だから、あなたのコードでは、あなたがこのような何かをしたいです。しかし、あなたがBind Parameters(あなたはそうですか?)を使用している場合、あなたはそれについて心配する必要はありません。

悪い:

string sql = "select * from product where name = ' + ProductNameTextBox.Text + '" 

グッド:

string sql = "select * from product where name = @name" 

using(var command = new SqlCommand(sql, connection)) 
{ 

    SqlParameter param = new SqlServerParameter("@name", SqlDbType.VarChar, 50); 
    param.Value = ProductNameTextBox.Text; 

    command.Parameters.Add(param); 

    command.ExecuteNonQuery(); 
} 
4

SQL injectionは、ユーザーが入力した値が直接クエリに入力されるため、悪意のあるユーザーがセキュリティの抜け穴を利用してデータベースにアクセスしたり、データベースを壊したりすることができます。たとえば、検索するテキストボックスがあり、入力された値は実際のクエリの内部に入ります。

ユーザーがコマンド引数を動的に入力しない限り、SQLインジェクションは脅威にはなりません。

0

「SQLクエリに直接入れる」とは、パラメータ化されたクエリのパラメータであることを意味します。リテラルの場合は答えがNOです。

1

生のSQLを使用している場合は、おそらくDataTableオブジェクトを使用している可能性があります。 DataTableを使用している場合は、DataViewを使用してデータベースから取得したデータをソートし、コントロールをDataViewにバインドできます。そうすることで、ユーザがSQLへのデータアクセスを提出することはありません。あなたがはい、その後、連結SQLへのViewStateから値を渡す場合

DataTable dt = GetData(); // pull data from DB with no sort specified 
DataView view = dt.DefaultView; // Get a DataView so you can sort 
view.Sort = "Col1, Col2 DESC"; // assemble sort string from your command args 
MyControl.DataSource = view; 
MyControl.DataBind(); 
関連する問題