实体框架的SQL操作符函数对SQL注入安全吗?

本文关键字:SQL 安全 注入 函数 框架 操作符 实体 | 更新日期: 2023-09-27 18:08:02

这些函数允许访问SQL中的特殊函数(SqlClient)。例如"like"或"between"。它们也为它们提供了一个更好的公共抽象层。不要与存储过程混淆

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

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

下面是一个例子:

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

我做了一些测试并跟踪了发送到服务器的实际SQL。单引号会自动转义。所以很明显这是有保护的。这里正在进行一些卫生处理。插入语句确实使用绑定变量。我应该满足于单引号替换吗?幕后还有什么别的事吗?

实体框架的SQL操作符函数对SQL注入安全吗?

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

除非有错误,否则所有EF查询和SQL辅助函数都是安全的,不会受到SQL注入攻击。