sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor foretrækker vi altid at bruge parametre i SQL-sætninger?

Brug af parametre hjælper med at forhindre SQL Injection-angreb når databasen bruges sammen med en programgrænseflade, såsom et skrivebordsprogram eller et websted.

I dit eksempel kan en bruger køre SQL-kode direkte på din database ved at lave sætninger i txtSalary .

For eksempel, hvis de skulle skrive 0 OR 1=1 , ville den udførte SQL være

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

hvorved alle empLaries ville blive returneret.

Yderligere kunne en bruger udføre langt værre kommandoer mod din database, herunder slette den, hvis de skrev 0; Drop Table employee :

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

Tabellen employee ville så blive slettet.

I dit tilfælde ser det ud til, at du bruger .NET. Brug af parametre er lige så let som:

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

Redigeret 2016-4-25:

I henhold til George Stockers kommentar ændrede jeg prøvekoden til ikke at bruge AddWithValue . Det anbefales også generelt, at du indpakker IDisposable s i using udsagn.



  1. Sådan opretter du pivottabel i PostgreSQL

  2. Brug af LIKE i en Oracle IN-klausul

  3. Filtrering af data med JDBC RowSet

  4. Find poster fra en tabel, som ikke findes i en anden