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 + '''')