L'utilisation de paramètres aide à prévenir les attaques par injection SQL lorsque la base de données est utilisée conjointement avec une interface de programme telle qu'un programme de bureau ou un site Web.
Dans votre exemple, un utilisateur peut directement exécuter du code SQL sur votre base de données en créant des instructions dans txtSalary
.
Par exemple, s'ils devaient écrire 0 OR 1=1
, le SQL exécuté serait
SELECT empSalary from employee where salary = 0 or 1=1
par lequel tous les empSalaries seraient retournés.
De plus, un utilisateur pourrait exécuter des commandes bien pires sur votre base de données, y compris la supprimer S'il écrivait 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
La table employee
serait alors supprimé.
Dans votre cas, il semble que vous utilisiez .NET. L'utilisation des paramètres est aussi simple que :
string sql = "SELECT empSalary from employee where salary = @salary";
using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
var salaryParam = new SqlParameter("salary", SqlDbType.Money);
salaryParam.Value = txtMoney.Text;
command.Parameters.Add(salaryParam);
var results = command.ExecuteReader();
}
Dim sql As String = "SELECT empSalary from employee where salary = @salary"
Using connection As New SqlConnection("connectionString")
Using command As New SqlCommand(sql, connection)
Dim salaryParam = New SqlParameter("salary", SqlDbType.Money)
salaryParam.Value = txtMoney.Text
command.Parameters.Add(salaryParam)
Dim results = command.ExecuteReader()
End Using
End Using
Modifier 2016-4-25 :
Selon le commentaire de George Stocker, j'ai changé l'exemple de code pour ne pas utiliser AddWithValue
. De plus, il est généralement recommandé d'envelopper IDisposable
s dans using
déclarations.