sql >> Database >  >> RDS >> Sqlserver

Waarom gebruiken we altijd liever parameters in SQL-statements?

Het gebruik van parameters helpt SQL Injection-aanvallen te voorkomen wanneer de database wordt gebruikt in combinatie met een programma-interface zoals een desktopprogramma of website.

In uw voorbeeld kan een gebruiker direct SQL-code op uw database uitvoeren door instructies te maken in txtSalary .

Als ze bijvoorbeeld 0 OR 1=1 . zouden schrijven , zou de uitgevoerde SQL zijn

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

waarbij alle empSalaries zouden worden teruggegeven.

Verder zou een gebruiker veel slechtere commando's kunnen uitvoeren tegen uw database, inclusief het verwijderen ervan. Als ze 0; Drop Table employee :

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

De tabel employee zou dan worden verwijderd.

In jouw geval lijkt het alsof je .NET gebruikt. Het gebruik van parameters is zo eenvoudig als:

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

Bewerk 2016-4-25:

Volgens de opmerking van George Stocker heb ik de voorbeeldcode gewijzigd om AddWithValue niet te gebruiken . Over het algemeen wordt ook aanbevolen om IDisposable . in te pakken s in using verklaringen.



  1. Deelnemen versus subquery

  2. PHP - PDO gebruiken met IN-componentarray

  3. Hoe DAYOFYEAR() werkt in MariaDB

  4. Hoe u alle tabellen in Oracle kunt weergeven