2010-08-13 78 views
5

是否有可能使用完全LinqToSQL或Entity Framewok遭受SQL注入的项目。实体框架,LinqToSQL和sql注入

我认为这可能不是因为ORM生成的SQL应该是免费的sql注入。但我不确定。

+1

重复动态SQL存储过程http://stackoverflow.com/questions/473173/will-using-linq-to-sql-help-prevent-sql -injection – 2010-08-13 04:14:54

+1

不完全重复,因为这也要求实体框架。此外,答案实际上是说在某些情况下可能会发生攻击 – 2010-08-13 04:36:03

回答

10

当您按照预期使用这些框架时,即直接使用这些实体/表,那么没有。所有字符串比较(即where name = 'smith')都被参数化。

唯一脆弱点是:

  • 任何字符串可以直接抵靠的上下文中执行。 dbContext.ExecuteQuery();与任何种类的破坏性字符串。

  • 执行使用任何给定的参数的

+1

VS2012开箱即用。 _其中(a => a.column ==“Quote'”)_确实转化为绑定var _ @ 1 = [Extent1]。[column] _。和_ Where(a => a.column!=“Quote'”)_翻译成_ N'Quote'''= [Extent1]。[column] _ – 2013-04-08 20:59:54

3

“这取决于”。

针对L2S或EF实体的简单LINQ查询是注入安全的,但您始终可以调用不是注入安全的存储过程或函数。

这显然是一个边缘情况,但是它发生在人们编写SPs /注入时打开的函数(使用proc中的参数值构成SQL中的字符串)。