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

Art*_*dez 7 c# entity-framework sql-injection

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

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

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

这是一个例子:

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

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

Aka*_*ava 5

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

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