Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Algoritmo per evitare SQL injection su MSSQL Server dal codice C#?

Non è necessario alcun algoritmo:non utilizzare la concatenazione di stringhe per creare istruzioni SQL. Usare invece la raccolta SqlCommand.Parameters. Questo fa tutto l'escape necessario dei valori (come la sostituzione di ' con '' ) e garantisce che il comando sia sicuro perché qualcun altro (ad esempio Microsoft) ha eseguito tutti i test.

per esempio. chiamando una procedura memorizzata:

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("MySprocName", connection))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}

Questa tecnica funziona anche per le istruzioni SQL inline, ad es.

var sql = "SELECT * FROM MyTable WHERE MyColumn = @Param1";
using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand(sql, connection))
{
    command.Parameters.AddWithValue("@Param1", param1Value);
    return command.ExecuteReader();
}