LINQ 的 ExecuteCommand 是否提供针对 SQL 注入攻击的保护?



我遇到了一种情况,需要使用LINQ的ExecuteCommand方法来运行插入。

类似(为了这个问题而简化):

object[] oParams = { Guid.NewGuid(), rec.WebMethodID };
TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);

问题是,这是否与参数化查询一样具有SQL注入验证?

做了一些研究,我发现了这个:

在我的简单测试中,它看起来像中传递的参数ExecuteQuery和ExecuteCommand方法是自动SQL编码的基于所提供的值。所以如果你传入一个带'的字符串字符,它将自动执行SQL将其转义为"。我相信类似的策略用于其他数据类型如DateTimes、Decimals等

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(你必须向下滚动才能找到它)

这对我来说似乎有点奇怪——大多数其他.Net工具都不知道"SQL转义"什么;它们使用真实的查询参数。

LINQ to SQL使用带参数的exec_SQL,这比连接到特定查询字符串中要安全得多。它应该和使用SqlCommand及其Paramaters集合一样安全,可以防止SQL注入(事实上,它可能是LINQ to SQL内部使用的)。再说一遍,那个有多安全?

相关内容

  • 没有找到相关文章

最新更新