Entity Framework 的 SQL 运算符函数对 SQL 注入安全吗?

Posted

技术标签:

【中文标题】Entity Framework 的 SQL 运算符函数对 SQL 注入安全吗?【英文标题】:Are SQL operator functions for Entity Framework safe against SQL injection? 【发布时间】:2013-03-31 02:20:46 【问题描述】:

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

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

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

这是一个例子:

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

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

【问题讨论】:

测试一下。分析您的数据库以准确了解生成的 SQL。 @marvc1 我做到了,这就是我发现单引号被转义为双引号的方式。但我不是 SQL 注入专家,真的够吗? 尝试x'; DROP TABLE tableName; -- 行,看看该表是否被删除。先替换表名。 【参考方案1】:

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

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

【讨论】:

以上是关于Entity Framework 的 SQL 运算符函数对 SQL 注入安全吗?的主要内容,如果未能解决你的问题,请参考以下文章

linq to sql 鍜?entity framework 杈撳嚭sql璇彞

利用entity framework修改SQL数据库中数据

在 Entity Framework Core 中使用 SQL 视图

无法将 SQL 查询转换为 Entity Framework Core

如何获取Entity Framework生成的SQL语句

《Entity Framework 6 Recipes》中文翻译系列 (13) -----第三章 查询之使用Entity SQL