C# 实体框架的SQL运算符函数对SQL注入是否安全?

C# 实体框架的SQL运算符函数对SQL注入是否安全?,c#,entity-framework,sql-injection,C#,Entity Framework,Sql Injection,这些函数允许访问SQL中的特殊函数(SqlClient)。例如“like”或“between”。它们还为它们提供了一个更好的通用抽象层。不要与存储过程“函数”混淆,存储过程“函数”是本文的主题 我的问题是,我似乎找不到一个完整的答案。它们是否可以安全使用,或者我是否将系统开放给其他用户?在编写常规SqlCommands时,我总是使用绑定变量 但在转向实体框架时。对SQL语句的控制较少。我不介意,但当我连接来自浏览器的字符串并将其传递给函数时,我不禁要担心 以下是一个例子: var QueryRe

这些函数允许访问SQL中的特殊函数(SqlClient)。例如“like”或“between”。它们还为它们提供了一个更好的通用抽象层。不要与存储过程“函数”混淆,存储过程“函数”是本文的主题

我的问题是,我似乎找不到一个完整的答案。它们是否可以安全使用,或者我是否将系统开放给其他用户?在编写常规SqlCommands时,我总是使用绑定变量

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

以下是一个例子:

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

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

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


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

测试它。对数据库进行概要分析,以准确地找出生成的SQL。@marvc1我这样做了,这就是我发现单qoutes被转义为双引号的原因。但我不是SQL注入专家,这真的很难吗?试试这句话
x';删除表tableName--
并查看该表是否已删除。首先替换表名。