2013-04-08 5 views
6

これらの関数は、SQLの特殊関数(SqlClient)にアクセスします。たとえば、 'like'や 'between'などです。また、それらのためのより一般的な抽象化レイヤーを提供します。この他のトピックであるストアドプロシージャ "関数"と混同しないでください。questionEntity FrameworkのSQL演算子関数はSQLインジェクションに対して安全ですか?

私は完全な答えを見つけることができないと私の質問です。彼らは安全ですか、またはSQL injection attackにシステムを開いていますか?通常のSqlCommandsを書くときは、常にバインド変数を使用します。

しかし、Entity Frameworkへの移行中。 SQL文に対する制御は少なくなります。私は気にしませんが、ブラウザから来る文字列を連結して関数に渡すと心配することはできません。ここで

は一例です:

var QueryResult = EFContext.Table.Where(x => 
    SqlFunctions.PatIndex("%" + Potentially_unsafe_search_keyword + "%", 
          x.Column) > 0); 

私はいくつかのテストを行なったし、サーバーに送信された実際のSQLをトレースします。一重引用符は自動的にエスケープされます。だから明らかにそこにいくつかの保護があります。いくつかの衛生化が行われています。 Insertステートメントはバインド変数を使用します。私は一重引用符置換に満足すべきでしょうか?舞台裏で何か他のことが起こっていますか?

+0

テストします。 dbをプロファイリングして、生成されたSQLを正確に調べます。 –

+0

@ marvc1私はそうしました。それは、単一のqoutが二重引用符でエスケープされていることがわかりました。しかし、私はSQLインジェクションの専門家ではない、本当にenougthですか? –

+0

'x '行を試してください。 DROP TABLE tableName; --'を実行し、そのテーブルが削除されているかどうかを確認します。テーブル名を最初に置き換えます。 –

答えて

3

すべてLinqの定数、変数、パラメータは、IDbCommandのコマンドパラメータとして渡されます。これは、基本となるドライバによってエスケープされます。

バグが存在しない限り、すべてのEFクエリとSQLヘルパ関数はSQLインジェクション攻撃に対して安全です。

関連する問題