2013-11-26 21 views
3

我对MySQL使用EF的代码优先方法。实体框架代码优先 - SQL注入预防

我想知道如果在这种方法的EF内置防止SQL注入,或者我必须在MySqlCommand中创建SQL字符串查询,并添加一些参数是安全的,从这种攻击?

我想我不需要但我想确定一下。

编辑(代码片段为例):

MyContext cont = new MyContext(); 
cont.Comment.AddObject(new Comment { Content = "my string" }); 
cont.SaveChanges(); 

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 

的第一个方法是要快得多代码为我

+0

如果你给出一个你认为可能容易受到SQL注入攻击的代码示例,这可能会有所帮助如果你的意思是我的意思,答案是否定的,你不需要做任何特殊的事情,但我可以想到你可能意味着的其他事情。 – hvd

回答

1

EF的LINQ到实体(如您第一次使用例如)负责防止SQL注入攻击。

7

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

您传递给EntityFramework的任何内容均作为内部IDbCommand中的Command传递。

但要小心,如果你正在用EntityFramework执行直接查询。

A sentence from MSDN.

虽然查询组合物在LINQ能够实体,它是 通过对象模型API来执行。与实体SQL查询不同,LINQ to Entities查询不是通过使用字符串操作 或级联组成的,它们不易受传统SQL注入攻击的影响。 “