Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用旧类型命令的实体框架的Sql注入风险_C#_Asp.net_Entity Framework_Security - Fatal编程技术网

C# 使用旧类型命令的实体框架的Sql注入风险

C# 使用旧类型命令的实体框架的Sql注入风险,c#,asp.net,entity-framework,security,C#,Asp.net,Entity Framework,Security,使用以下命令是否存在任何风险 using (var db = new DbConnection()) { db.Database.ExecuteSqlCommand("command and maybe @param", new SqlParameter("param", param)); } 我需要使用一些旧类型的命令来选择受保护的列,我想知道,即使是实体框架也存在sql注入风险。只要您没有在代码或您的sql命令中执行任何字符串串联,您就不会受到sql注入的影响 编辑 为了澄清,如果

使用以下命令是否存在任何风险

using (var db = new DbConnection())
{
    db.Database.ExecuteSqlCommand("command and maybe @param", new SqlParameter("param", param));
}

我需要使用一些旧类型的命令来选择受保护的列,我想知道,即使是实体框架也存在sql注入风险。

只要您没有在代码或您的sql命令中执行任何字符串串联,您就不会受到sql注入的影响

编辑

为了澄清,如果您的参数是字符串值就可以了。但如果参数包含SQL,则可能不安全。就我所说的SQL命令中的字符串连接而言,您可能必须使用SQL命令
EXEC
,才能使其正常工作,这样您就有麻烦了

安全:

危险:

EXEC ('SELECT * FROM Employees WHERE employeeId = ''' + @employeeId + '''')
-OR-
EXEC SP_EXECUTESQL ('SELECT * FROM Employees WHERE employeeId = ''' + @employeeId + '''')

即使使用参数作为字符串?@MahmutYaman首先,如果EF中有这么大的安全漏洞,它也会有点垃圾。其次,EF在幕后使用参数化查询,这是注入安全的。@aron true,但EF确实允许上面危险的sql。单独使用参数并不能保护您,您需要正确使用它们
EXEC ('SELECT * FROM Employees WHERE employeeId = ''' + @employeeId + '''')
-OR-
EXEC SP_EXECUTESQL ('SELECT * FROM Employees WHERE employeeId = ''' + @employeeId + '''')