2008-10-01 18 views
15

Eklemek için LINQ's ExecuteCommand yöntemini kullanmam gereken bir durum var.LINQ'nun ExecuteCommand'ı SQL enjeksiyon saldırılarına karşı koruma sağlıyor mu?

şey gibi (Bu soru amaçlar için basitleştirilmiş):

object[] oParams = { Guid.NewGuid(), rec.WebMethodID }; 

TransLogDataContext.ExecuteCommand (
"INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})", 
oParams); 

bu SQL enjeksiyon geçirmez parametreli sorguları aynı şekilde ise soru nedir?

cevap

14

biraz araştırma yaptım ve bunu buldum:

gibi ExecuteQuery ve ExecuteCommand yöntemlerde geçirilen parametreleri otomatik SQL değeri besleniyor dayalı kodlanmış benim basit testlerde

, görünüşe . Yani ' karakterli bir dizgede geçirirseniz, otomatik olarak SQL ' '' a kaçacaktır. Ben, vb benzer politikası diğer veri tipleri tarihsaat, Ondalıklar gibi için kullanılır inanıyoruz

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
Bu bana biraz tuhaf

(Onu bulmak için kaydırma yolu aşağı var) - Diğer çoğu .Net araçları "SQL kaçışına" hiçbir şeyden daha iyi bilir; Bunun yerine gerçek sorgu parametrelerini kullanırlar.

+8

Yorum yapan, ScottGu, \, ağdaki rastgele bir adamdan daha fazlası! http://en.wikipedia.org/wiki/Scott_Guthrie – nathaniel

0

LINQ to SQL, geçici sorgu dizesiyle birleştirmekten çok daha güvenli olan exec_sql parametrelerini kullanır. SqlCommand ve Paramaters koleksiyonunu kullanması gibi güvenli bir againt SQL enjeksiyonu olmalıdır (aslında, SQL'in dahili olarak LINQ kullanması). O zaman tekrar güvenli midir?

+0

SqlCommand ve parametreler, saklanan yordam, sp_exec ile işlemek için dizeleri işlemek olmadığı sürece güvenlidir. – DamienG

İlgili konular