1

我已将 SQL Server 存储过程导入到.edmx文件中。我正在调用生成的方法,例如:

entity.MySP(stringInput)

使用 EF 时是否stringInput需要验证参数(用于 SQL 注入等),或者我可以假设 EF 为我这样做?如果没有,是否可以调用一种方法来转义/验证输入参数?

我正在使用 SQL Server 2008 R2、.NET 4.0、C#、ASP.NET MVC 4、VS2010。

编辑:请注意,我想使用 LINQ 而不是调用 SP,但我使用的是 FREETEXT,所以我认为这是更优雅的解决方案。

4

2 回答 2

1

这实际上取决于您在存储过程中所做的事情。只需使用存储过程,您就无法免受 SQL 注入的影响。相反,通过在 LINQ to Entity 代码中使用变量,您可以安全地避免 SQL 注入,因为那里的查询也已正确参数化。不幸的是,实体框架不支持全文索引,因此您需要借助 procs 或函数来使用它们来解决性能问题。但是,我不会说它一定比 LINQ 生成的查询更“优雅”。

于 2012-10-05T13:34:20.360 回答
1

您可以在此处阅读有关 LINQ to Entity Framework Security 的更多信息,http: //msdn.microsoft.com/en-us/library/cc716760.aspx。查看标题为“查询的安全注意事项”的部分。

为了具体回答您的问题,Entity Framework 将调用您的存储过程并传入 stringInput 值。这意味着即使 stringInput 是一个旨在将有害内容注入数据库的 SQL 语句,仅将其传递给存储过程也不会导致 SQL 注入攻击。

但是,根据您在存储过程中使用 stringInput 的方式,您仍然可能让自己受到攻击。具体来说,如果您在执行的动态 SQL 语句中使用 stringInput,您就会让自己受到攻击。如果您使用它在 SELECT 语句的 WHERE 部分进行比较,您应该是安全的。

于 2012-10-05T13:38:58.953 回答