2016-03-31 13 views
0

Aşağıdaki kod sql enjeksiyonuna eğilimlidir. ASLA bildiğim CommandBuilder her zaman SELECT/UPDATE/INSERT komutları oluştururken parametreli sorgular kullanır.Datalandpter var. SQL enjeksiyon için eğilimli güncelleyin?

using (var dataAdapter = new SqlDataAdapter(selectCommand)) 
using (var cmdBuilder = new SqlCommandBuilder(dataAdapter)) 
{ 
cmdBuilder.ConflictOption = ConflictOption.OverwriteChanges; 

using (var dataset = new DataSet()) 
{ 


dataAdapter.UpdateBatchSize = 0; 
dataAdapter.AcceptChangesDuringFill = false; 
dataAdapter.AcceptChangesDuringUpdate = false; 

stopwatch.Start(); 
dataAdapter.Fill(dataset, "ABC"); 
dataset.AcceptChanges(); 
ds.tables[0].Rows["ABC"] = MALICIOUS SQL INJECTION ATTEMPT; // let's 
say this is where the end user could slip malicious string he wanted 
into 


dataAdapter.Update(dataset, " ABC"); 
} 
} 

cevap

0

CommandBuilders eklemek, güncellemek oluştururken parametreli sorguları kullanın ve ifadeleri silin. Yani hayır, onlardan bir SQL enjeksiyon saldırısına maruz kalmayacaksınız. Parametreli bir sorguda, parametre işaretleyicileri ile SQL deyimi ayrıştırılır ve daha sonra parametreler ayrı olarak itilir. Parametreler içindeki değerler SQL sorgu ayrıştırıcısı tarafından çözümlenmez, bu nedenle bir enjeksiyonun gerçekleşmesi için kod yolunda hiçbir yer yoktur.

Göz önünde bulundurulması gereken diğer bir seçenek, Entity Framework veya Dapper gibi daha hafif bir şey gibi bir ORM (object relational mapper) kullanmaktır.

+0

Kodum oldukça güvenli değil mi? – user6095165

+0

Evet, bir komut üreticisi kullanıyorsunuz. –

İlgili konular