Entity Framework и запрос необработанных строк - предотвращение внедрения SQL - PullRequest
2 голосов
/ 15 февраля 2012

Я выполняю строковый запрос, используя EF 4:

string query = "SELECT * FROM Table WHERE ....";

  [+ build WHERE clausule based on the user's input values]

 db.ExecuteStoreQuery<TAble>(query).ToList();

Мне интересно, как предотвратить этот запрос от SQL-инъекции в выражении WHERE.Есть идеи?

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

Вам необходимо использовать параметризованный запрос:

// 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();
1 голос
/ 15 февраля 2012

Вы предотвратите это так же, как и при построении SqlCommand.Вы сделаете запрос параметризованным и передадите набор параметров в качестве второго аргумента в метод ExecuteStoreQuery (если вы передадите только значения, EF создаст параметры для вас, но вы должны передать их в правильном порядке, как указано в запросе).

...