هل تقدم ExecuteCommand LINQ في الحماية من هجمات حقن SQL؟
-
03-07-2019 - |
سؤال
ولقد حصلت على الحالة التي أنا بحاجة إلى استخدام أسلوب ExecuteCommand LINQ لتشغيل إدراج.
وشيء من هذا القبيل (المبسطة لأغراض هذا السؤال):
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، الكسور العشرية، وغيرها.
اقتباس فقرة><وأ href = "http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx" يختلط = "نوفولو noreferrer"> http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx <ر > (لقد انتقل لأسفل للعثور عليه)
وهذا يبدو غريبا بعض الشيء بالنسبة لي - أدوات. صافي معظم أخرى تعرف أفضل من أي شيء "الهروب SQL". أنها تستخدم معلمات الاستعلام الحقيقية بدلا من ذلك.
نصائح أخرى
وLINQ إلى SQL يستخدم <م> exec_sql م> مع المعلمات، والذي هو أكثر أمانا بكثير من وصل إلى سلسلة الاستعلام المخصص. يجب أن تكون آمنة كما againt حقن SQL مثل استخدام SqlCommand وجمع PARAMATERS لها (في الواقع، هو على الأرجح ما LINQ إلى SQL يستخدم داخليا). ثم مرة أخرى، كيف هي آمنة <م> أن م>