2010-02-03 175 views
10

我见过一些关于L2E是否易受SQL注入冲突的文章。LINQ to Entities和SQL注入

MSDN

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

这是否意味着存在可能起作用的“非传统”攻击? This article有一个非参数化查询的例子 - 假设如果您通过变量传递用户提供的数据,它会被参数化吗?

如果我做的:

from foo in ctx.Bar where foo.Field = userSuppliedString select foo; 

我是安全的吗?

回答

9

在你的例子中,你正在使用一个变量(userSuppliedString),所以它将被参数化。

如果你有在你的代码中的文字值:

from foo in ctx.Bar where foo.Field == "Hi" select foo; 

...那么EF 1将不参数,但也有SQL注入的零危险,因为它是一个文字。

3

祝你好运,试图让任何人告诉你,某段代码没有特定的安全漏洞。话虽如此,我个人不会担心通过LINQ查询向量的SQL注入攻击(除非我在幕后做了一些非常奇怪的事情)。