Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо винаги предпочитаме да използваме параметри в SQL изрази?

Използването на параметри помага за предотвратяване на атаки с инжектиране на SQL когато базата данни се използва във връзка с програмен интерфейс, като например настолна програма или уеб сайт.

Във вашия пример, потребител може директно да стартира SQL код във вашата база данни, като създаде изявления в txtSalary .

Например, ако трябва да напишат 0 OR 1=1 , изпълненият SQL ще бъде

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

при което всички empSalaries ще бъдат върнати.

Освен това, потребителят може да изпълнява много по-лоши команди срещу вашата база данни, включително да я изтрие, ако напише 0; Drop Table employee :

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

Таблицата employee след това ще бъде изтрит.

Във вашия случай изглежда, че използвате .NET. Използването на параметри е толкова лесно, колкото:

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

Редактиране 2016-4-25:

Според коментара на Джордж Стокър промених примерния код, за да не използвам AddWithValue . Също така обикновено се препоръчва да обвиете IDisposable е в using изявления.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предоставяне на потребителски достъп на msdb до пощенски профил на база данни в SQL Server (T-SQL)

  2. Мога ли да използвам ADFS 2.0 за удостоверяване на определени потребители срещу SQL Server?

  3. Преобразуването не бе успешно при преобразуване на дата и/или час от символен низ при вмъкване на дата и час

  4. Как да използвате израза IF/ELSE за актуализиране или създаване на нов запис на xml възел в Sql

  5. Има ли функция Max в SQL Server, която приема две стойности като Math.Max ​​в .NET?