实体框架代码优先 - SQL注入预防

Ton*_*ony 4 entity-framework ef-code-first

我正在使用EF的Code First方法和MySQL.

我想知道该方法中的EF是否内置了针对SQL注入的保护,还是我必须在MySqlCommand中创建SQL字符串查询并添加一些参数以免受这些攻击?

我想我不必,但我想确定一下.

编辑(代码片段示例):

MyContext cont = new MyContext();
cont.Comment.AddObject(new Comment { Content = "my string" });
cont.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

要么

string query = "INSERT INTO Comment(Content)VALUES(@myVal)";

MySqlCommand comm = new MySqlCommand(query);
comm.CommandType = CommandType.Text;

comm.Parameters.AddWithValue("@myVal", "my string");
...and later execute that query
Run Code Online (Sandbox Code Playgroud)

第一种方法为我编码要快得多

Kis*_*mar 8

您的第一个代码是SQL注入证明.

传递给EntityFramework的任何内容都在内部IDbCommand中作为Command传递.

但要注意,如果您使用EntityFramework执行直接查询.

来自MSDN的一句话.

尽管在LINQ to Entities中可以进行查询组合,但它是通过对象模型API执行的.与实体SQL查询不同,LINQ to Entities查询不是使用字符串操作或连接组成的,并且它们不易受传统SQL注入攻击的影响."


Moh*_*oho 1

EF 的 LINQ to Entities(如第一个示例中使用的)负责防止 SQL 注入攻击。