Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum bevorzugen wir immer die Verwendung von Parametern in SQL-Anweisungen?

Die Verwendung von Parametern hilft, SQL-Injection-Angriffe zu verhindern 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 txtSalary erstellt .

Zum Beispiel, wenn sie 0 OR 1=1 schreiben würden , wäre das ausgeführte SQL

 SELECT empSalary from employee where salary = 0 or 1=1

wodurch alle empSalaries zurückerstattet würden.

Darüber hinaus könnte ein Benutzer weitaus schlimmere Befehle für Ihre Datenbank ausführen, einschließlich des Löschens. Wenn er 0; Drop Table employee :

SELECT empSalary from employee where salary = 0; Drop Table employee

Die Tabelle employee würde dann gelöscht werden.

In Ihrem Fall sieht es so aus, als würden Sie .NET verwenden. Die Verwendung von Parametern ist so einfach wie:

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

Bearbeiten 2016-4-25:

Gemäß dem Kommentar von George Stocker habe ich den Beispielcode so geändert, dass AddWithValue nicht verwendet wird . Außerdem wird allgemein empfohlen, IDisposable zu umschließen s in using Aussagen.