Durch die Verwendung von Parametern können SQL Injection-Angriffe verhindert werden, wenn die Datenbank in Verbindung mit einer Programmschnittstelle wie einem Desktop-Programm oder einer Website verwendet wird.
In Ihrem Beispiel kann ein Benutzer SQL-Code direkt in Ihrer Datenbank ausführen, indem er Anweisungen in erstellt txtSalary
.
Wenn sie beispielsweise schreiben würden 0 OR 1=1
, wäre das ausgeführte SQL
SELECT empSalary from employee where salary = 0 or 1=1
wobei alle empSalaries zurückgegeben würden.
Außerdem könnte ein Benutzer weitaus schlechtere Befehle für Ihre Datenbank ausführen, einschließlich des Löschens, wenn er Folgendes geschrieben hat 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Die Tabelle employee
würde dann gelöscht.
In Ihrem Fall scheint es, als würden Sie .NET verwenden. Die Verwendung von Parametern ist so einfach wie:
C #
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();
}
VB.NET
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
Bearbeiten 2016-4-25:
Gemäß dem Kommentar von George Stocker habe ich den Beispielcode so geändert, dass er nicht verwendet wird AddWithValue
. Außerdem wird allgemein empfohlen, IDisposable
s in using
Anweisungen einzuschließen .