Ciao a tutti,
ho da poco subito un attacco sul mio sito con la tecnica dell'SQL injection, cosa dalla quale pensavo di essermi tutelato avendo adottato quelle che credevo essere le basilari norme di sicurezza, e così mi stanno venendo mille dubbi su come imposto le mie procedure di interrogazione al DB.

Vi posto il seguente esempio, che è il nocciolo della funzione per la verifica del login utente, e vi chiedo se è parametrizzata "a dovere", cioè se effettivamente possa così strutturata essere blindata dagli attacchi.

Naturalmente rimango aperto ad ogni consiglio e/o link utile per studiare meglio l'argomento.

Grazie mille.



codice:
Try

 
   cmd_Legge.Connection = cn
 
   cn.Open()

   '
   SQL_Legge &= "SELECT *"
   SQL_Legge &= "FROM tbUtenti "
   SQL_Legge &= "WHERE "
   SQL_Legge &= "NomeUtente = @NomeUtente "
   SQL_Legge &= "AND "
   SQL_Legge &= "PasswordUtente = @PasswordUtente"
   '
   cmd_Legge.Parameters.AddWithValue("@NomeUtente", SqlDbType.NVarChar).Value = NomeUtente
   cmd_Legge.Parameters.AddWithValue("@PasswordUtente", SqlDbType.NVarChar).Value = PasswordUtente
   '
   cmd_Legge.CommandText = SQL_Legge
   dr_Legge = cmd_Legge.ExecuteReader

   If dr_Legge.Read Then
     IDUtente = dr_Legge.Item("IDUtente")
     Return True
   Else
     Return False
   End If
   '
   If Not (dr_Legge Is Nothing) Then dr_Legge.Close()

 Catch ex As Exception

    ' Visualizza Messaggio di Errore
    '
    MessageBox.Show(ex.Message)

 Finally

    ' Chiude la connessione se aperta
    '
    If Not (cn Is Nothing) Then cn.Close()

 End Try