Entity Framework的SQL操作符函数是否可以安全地防止SQL注入?

时间:2013-04-08 20:44:25

标签: c# entity-framework sql-injection

这些函数可以访问SQL中的专业函数(SqlClient)。例如'喜欢'或'之间'。而且它们还为它们提供了更好的通用抽象层。不要与存储过程“功能”相混淆,这是另一个question的主题。

我的问题似乎无法找到完整的答案。它们是否安全使用,或者我是否将系统打开到SQL injection attack?在编写常规SqlCommands时,我总是使用绑定变量。

但是转向实体框架。对SQL语句的控制较少。我不介意,但当我连接来自浏览器的字符串并将其传递给函数时,我不禁担心。

以下是一个例子:

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

我做了一些测试,并追踪发送到服务器的实际SQL。单引号会自动转义。很明显,那里有一些保护。有一些消毒正在进行中。 Insert语句确实使用绑定变量。我应该满足于单一报价的替换吗?幕后还有其他事情发生吗?

1 个答案:

答案 0 :(得分:4)

Linq中的每个常量变量参数都作为IDbCommand中的命令参数传递,而后者又被底层驱动程序转义。

除非存在错误,否则所有EF查询和SQL帮助程序函数都可以安全地防止SQL注入攻击。