2016-03-31 4 views
0

Ist der folgende Code anfällig für SQL-Injektion? Soweit ich weiß, verwendet CommandBuilder immer parametrisierte Abfragen beim Generieren seiner SELECT/UPDATE/INSERT-Befehle.Ist Datenadapter. Update anfällig für SQL-Injektion?

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"); 
} 
} 

Antwort

0

CommandBuilders verwenden parametrisierte Abfragen beim Generieren von Einfüge-, Aktualisierungs- und Löschanweisungen. Also nein, Sie werden keinen SQL-Injection-Angriff von ihnen unterliegen. In einer parametrisierten Abfrage wird die SQL-Anweisung mit ihren Parametermarken analysiert, und dann werden die Parameter getrennt übertragen. Werte innerhalb der Parameter werden vom SQL-Abfrageparser nicht analysiert. Daher gibt es im Codepfad keinen Eintrag für eine Injektion.

Eine andere Option ist die Verwendung eines ORM (object relational mapper) wie Entity Framework oder etwas leichteres wie Dapper.

+0

Also mein Code ziemlich sicher, oder? – user6095165

+0

Ja, Sie verwenden einen Befehlsersteller. –