2
私はEF 4を使用して文字列のクエリを実行します。何か案は ?Entity Frameworkのと生の文字列クエリSQLインジェクションの防止
私はEF 4を使用して文字列のクエリを実行します。何か案は ?Entity Frameworkのと生の文字列クエリSQLインジェクションの防止
あなたはパラメータ化クエリを使用する必要があります。
// Build where clause
var filters = new StringBuilder();
var parameters = new List<object>();
if (!string.IsNullOrEmpty(name))
{
if (filters.Length > 0)
filters.Append(" AND ");
filters.Append("name = @name");
var param = new SqlParameter("@name", SqlDbType.NVarChar);
param.Value = name;
parameters.Add(param);
}
...
// Build query
string query = "SELECT * FROM Table";
if (filters.Length > 0)
query = query + " WHERE " + filters;
// Execute
db.ExecuteStoreQuery<TAble>(query, parameters.ToArray()).ToList();
SqlCommand
をビルドしたときと同じ方法でそれを防止します。あなたはクエリをパラメータ化し、最後のパラメータのコレクションをExecuteStoreQuery
メソッドの2番目の引数として渡します(値だけを渡すと、EFはパラメータを作成しますが、クエリに正しい順序で渡す必要があります)。