我使用EF 4执行字符串查询:
string query = "SELECT * FROM Table WHERE ....";
[+ build WHERE clausule based on the user's input values]
db.ExecuteStoreQuery<TAble>(query).ToList();
我想知道如何在WHERE子句中防止SQL注入的查询。有什么想法吗?
发布于 2012-02-16 01:19:47
您需要使用参数化查询:
// 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();
发布于 2012-02-16 01:19:21
您将以与构建SqlCommand
时相同的方式来防止它。您将使查询参数化,并将参数集合作为第二个参数传递给ExecuteStoreQuery
方法(如果只传递值,EF将为您创建参数,但必须按照查询中的正确顺序传递它们)。
https://stackoverflow.com/questions/9297903
复制相似问题