我已将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,所以我认为这是更优雅的解决方案。
答案 0 :(得分:1)
这实际上取决于你在存储过程中做了什么。只需使用存储过程,您就不会受到SQL注入的影响。相反,通过在LINQ to Entity代码中使用变量,您可以安全地使用SQL注入,因为查询也在那里正确参数化。遗憾的是,实体框架不支持全文索引,因此您需要求助于proc或函数将其用于性能问题。但我不会说它比LINQ生成的查询更“优雅”。
答案 1 :(得分: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部分进行比较,那么您应该是安全的。