Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego zawsze wolimy używać parametrów w instrukcjach SQL?

Używanie parametrów pomaga zapobiegać atakom wstrzykiwania SQL gdy baza danych jest używana w połączeniu z interfejsem programu, takim jak program komputerowy lub witryna internetowa.

W Twoim przykładzie użytkownik może bezpośrednio uruchomić kod SQL w Twojej bazie danych, tworząc instrukcje w txtSalary .

Na przykład, gdyby mieli napisać 0 OR 1=1 , wykonany SQL byłby

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

dzięki czemu wszystkie empSalaries zostaną zwrócone.

Co więcej, użytkownik może wykonywać znacznie gorsze polecenia w stosunku do Twojej bazy danych, w tym usuwać ją Jeśli napisał 0; Drop Table employee :

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

Tabela employee zostanie wtedy usunięty.

W twoim przypadku wygląda na to, że używasz platformy .NET. Korzystanie z parametrów jest tak proste, jak:

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

Edytuj 25.04.2016:

Zgodnie z komentarzem George'a Stockera zmieniłem przykładowy kod, aby nie używał AddWithValue . Ponadto ogólnie zaleca się zawinięcie IDisposable s w using oświadczenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykłady konwersji „daty” na „przesunięcie daty” w SQL Server (T-SQL)

  2. Przełączanie partycji w SQL Server (T-SQL)

  3. Jak wykonać pakiet SSIS z platformy .NET?

  4. Replikacja bazy danych SQL Server

  5. Sposoby śledzenia usuniętej bazy danych w SQL Server