LINQ to Entities和SQL注入

10

我看到一些关于L2E是否容易受到SQL注入攻击的文章存在冲突。

来自MSDN的内容:

虽然在LINQ to Entities中可以进行查询组合, 但是它是通过对象模型API来执行的。与Entity SQL查询不同, LINQ to Entities查询不使用字符串操作或连接进行组合,并且不容易受到传统的SQL注入攻击。

这是否意味着有可能存在可以使用的“非传统”攻击方式?这篇文章提供了一个不带参数的查询示例 - 如果通过变量传递用户提供的数据,那么可以安全地假定它将被设置为参数吗?

如果我这样做:

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

我安全吗?

2个回答

9

在你的例子中,你使用了一个变量(userSuppliedString),因此它将被参数化。

如果你的代码中有一个字面值:

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

如果它是一个文字字面量,EF 1就不会将其参数化,但也没有SQL注入的风险。

3

祝你好运,试图让任何人告诉你某段代码没有某种安全漏洞是很困难的。尽管如此,就个人而言,我不会担心通过LINQ查询向量进行SQL注入攻击(除非我在幕后做了一些非常奇怪的事情)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接