我遇到过需要使用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内部使用的)。那么

有多安全?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top