发布
社区首页 >问答首页 >实体框架和原始字符串查询- SQL注入预防

实体框架和原始字符串查询- SQL注入预防
EN

Stack Overflow用户
提问于 2012-02-16 01:10:40
回答 2查看 1.8K关注 0票数 2

我使用EF 4执行字符串查询:

代码语言:javascript
代码运行次数:0
复制
string query = "SELECT * FROM Table WHERE ....";

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

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

我想知道如何在WHERE子句中防止SQL注入的查询。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-16 01:19:47

您需要使用参数化查询:

代码语言:javascript
代码运行次数:0
复制
// 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();
票数 5
EN

Stack Overflow用户

发布于 2012-02-16 01:19:21

您将以与构建SqlCommand时相同的方式来防止它。您将使查询参数化,并将参数集合作为第二个参数传递给ExecuteStoreQuery方法(如果只传递值,EF将为您创建参数,但必须按照查询中的正确顺序传递它们)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9297903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档