我遇到过需要使用LINQ的ExecuteCommand方法来运行插入的情况。
类似的东西(为了这个问题而简化):
object[] oParams = { Guid.NewGuid(), rec.WebMethodID };
TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})",
oParams);
问题是,这是否是SQL注入证明,与参数化查询的方式相同?
答案 0 :(得分:14)
做了一些研究,我发现了这个:
在我的简单测试中,它看起来像 传递的参数 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逃逸”更好;他们使用真实的查询参数。
答案 1 :(得分:0)
LINQ to SQL使用带参数的 exec_sql ,这比连接到即席查询字符串要安全得多。它应该像使用SqlCommand及其Paramaters集合一样安全地注入SQL(事实上,它可能是LINQ to SQL内部使用的)。那么
有多安全?