3

クエリが呼び出されるたびに、それぞれ+1と-1supで値を更新しようとしている2つのSQLクエリがあります。opp

最初のクエリ:

    query=update disc set sup=@sup, opp=@opp where did=@did

    int sup=getnoofsup(did);
    int opp = getnoofopp(did);

    com.Parameters.AddWithValue("@sup", sups + 1);
    com.Parameters.AddWithValue("@opp", opps - 1);
    com.Parameters.AddWithValue("@did", did);

    com.ExecuteNonQuery();

2番目のクエリ

string query="update disc set sup=sup+1, opp=opp-1 where did=@did" ;
com.Parameters.AddWithValue("@did", did);

com.ExecuteNonQuery();

@supと交換するので、インジェクションの2番目のクエリに脅威はありますsup+1か?

4

4 に答える 4

2

いいえ、2番目のクエリは完全にパラメータ化されているため、最初のクエリと同じくらい安全です。したがって、外部データがSQLクエリ自体のテキストを入力するためのパスを提示しません。式は、sup+1プログラム*ではなくRDBMSによって計算されるため、既存のSQLに新しいコードを挿入する機会を提供することはできません。


*execその後、再解釈のためにSQLのストアドプロシージャに表示されることはありません。

于 2012-12-18T11:37:50.673 に答える
1

どちらのクエリもSQLインジェクションに対して同等に安全ですが

com.Parameters

常に望ましいです。

于 2012-12-18T11:38:47.150 に答える
0

2番目のクエリの方が優れています。

string query="update disc set sup=sup+1, opp=opp-1 where did=@did" ;
com.Parameters.AddWithValue("@did", didparameter);
com.ExecuteNonQuery();
于 2012-12-18T11:40:39.380 に答える
0

どちらのクエリも安全ですが、追加する必要がないため、2番目のクエリの方が適していますparameter。最初のクエリで、urの値supoppuが持つ必要のない値を見つけます。

于 2012-12-24T09:41:01.997 に答える