0

SQL インジェクション攻撃を防ぐために、ExecuteStoredProcedure から sql を実行するときにパラメーター化されたクエリを使用する必要があるかどうか疑問に思っていますか?

このMSDN リンクによると、パラメーターを使用する必要があります。

この他の MSDN リンクによると、{0} を使用する SQL 文字列は、パラメーターを使用するのと同じです。

では、SQL ステートメントに {0} や {1} などを含めるだけで本当に問題ないのでしょうか。

var rv = _context.ExecuteStoreQuery<int>("select ID from table where typeID = {0}", typeID);

または私は必要ですか:

     var param = new SqlParameter("@typeID", SqlDbType.Int);
     param.Value = typeID;
     var rv = _context.ExecuteStoreQuery<int>("select ID from table where typeID = @typeID", param);
4

1 に答える 1

0

基本的にはこれに尽きます。多くの呼び出しがあり、typeID の値が異なるクエリを再利用していますか? そうであれば、パフォーマンスにわずかな違いが生じる可能性があります。

一方、この呼び出しを 1 回だけ行う場合、パフォーマンス ヒットの大部分は DB 呼び出しになります。

個人的には、過去 8 ~ 10 年間に書いたコードで、これが具体的な違いを生んだことはまだありません。

だから私は投票します - 気にしないでください。

于 2012-05-25T14:24:44.233 に答える