2013-04-08 51 views
6

这些函数可以访问SQL中的专用函数(SqlClient)。例如“喜欢”或“之间”。而且他们也为他们提供了一个更好的通用抽象层。不要与存储过程“功能”混淆,这是其他question的主题。实体框架的SQL运算符函数是否可以防范SQL注入?

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

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

下面是一个例子:

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

我做了一些测试,并追踪发送到服务器的实际SQL。单引号会自动跳出。很明显,那里有一些保护。有一些消毒正在发生。插入语句确实使用绑定变量。我应该满意单引号替换吗?幕后有其他事情吗?

+0

测试它。分析您的数据库以找出究竟生成了什么SQL。 – 2013-04-08 21:07:53

+0

@ marvc1我做过了,这就是我发现单个qoutes被转化为双引号的原因。但我不是SQL注入专家,这真的很棒吗? – 2013-04-08 21:10:22

+0

尝试行'x'; DROP TABLE tableName; --'看看这个表是否被丢弃。先替换表名。 – 2013-04-08 21:13:08

回答

3

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

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

相关问题