Utilizzare la classe SqlParameter per prevenire attacchi di tipo SQL-injection

di Daniele Bochicchio, in ASP.NET, C#, System.Data,

La classe SqlParameter è utilizzata normalmente per la definizione dei valori associati ai parametri delle stored procedure di SQL Server.
In realtà la si può utilizzare anche per prevenire attacchi di tipo SQL-injection (ovvero, codice SQL inserito tramite vari strateggi ed eseguito dalla nostra pagina), anche in presenza di normali query, come quella di questo esempio.

<script runat="server" language="C#">
void SubmitClick(object sender, EventArgs e) {
  // connessione
  SqlConnection conn = new SqlConnection(strconn);
    
  // oggetto command
  string strSQL = "INSERT INTO Tabella (colonna, colonna2) VALUES (@colonna1, @colonna2)";
  SqlCommand cmd = new SqlCommand(strSQL, conn);
    
  // parametri
  SqlParameter parameter1 = new SqlParameter("@colonna1", SqlDbType.NVarChar, 250);
  parameter1.Value = Server.HtmlEncode(colonna1.Text);
  cmd.Parameters.Add(parameter1);
    
  SqlParameter parameter2 = new SqlParameter("@colonna2", SqlDbType.NVarChar, 250);
  parameter2.Value = Server.HtmlEncode(colonna2.Text);
  cmd.Parameters.Add(parameter2);
    
  // connessione ed esecuzione query
  conn.Open();
  cmd.ExecuteNonQuery();
  conn.Close();
}
</script>

Il codice è ovviamente funzionante con Access, a patto di utilizzare le classi contenute nel namespace System.Data.OleDb, anzichè System.Data.SqlClient.
In linea di massima basta cambiare il prefisso Sql negli oggetti Connection, Parameter e Command con OleDb perchè tutto funzioni alla stessa maniera.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi