Utiliser des paramètres aide à prévenir les attaques par injection SQL lorsque la base de données est utilisée en conjonction avec une interface de programme telle qu'un programme de bureau ou un site web.
Dans votre exemple, un utilisateur peut exécuter directement du code SQL sur votre base de données en élaborant des instructions dans txtSalary
.
Par exemple, s'ils écrivaient 0 OU 1=1
, le SQL exécuté serait
SELECT empSalary de l'employé où le salaire = 0 ou 1=1
où tous les salaires d'employés seraient retournés.
De plus, un utilisateur pourrait exécuter des commandes bien pires contre votre base de données, y compris la supprimer s'ils écrivaient 0; Supprimer La Table employé
:
SELECT empSalary de l'employé où le salaire = 0; Supprimer La Table employé
La table employé
serait ensuite supprimée.
Dans votre cas, il semble que vous utilisiez .NET. Utiliser des paramètres est aussi simple que :
string sql = "SELECT empSalary de l'employé où le salaire = @salaire";
using (SqlConnection connection = new SqlConnection(/* informations de connexion */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
var salaireParam = new SqlParameter("salaire", SqlDbType.Money);
salaireParam.Valeur = txtMoney.Text;
command.Parameters.Ajouter(salaireParam);
var résultats = command.ExecuteReader();
}
Dim sql As String = "SELECT empSalary de l'employé où le salaire = @salaire"
Utilisant connection comme Nouveau SqlConnection("chaîne de connexion")
Utilisant command comme Nouveau SqlCommand(sql, connection)
Dim salaireParam = Nouveau SqlParameter("salaire", SqlDbType.Money)
salaireParam.Valeur = txtMoney.Text
command.Parameters.Ajouter(salaireParam)
Dim résultats = command.ExecuteReader()
Fin Utilisation
Fin Utilisation
Modifier 2016-4-25 :
Comme le commentaire de George Stocker, j'ai modifié le code d'exemple pour ne pas utiliser AddWithValue
. De plus, il est généralement recommandé d'encadrer les IDisposable
s dans des déclarations using
.