Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao chúng ta luôn thích sử dụng các tham số trong các câu lệnh SQL?

Sử dụng các tham số giúp ngăn chặn các cuộc tấn công SQL Injection khi cơ sở dữ liệu được sử dụng cùng với giao diện chương trình, chẳng hạn như chương trình máy tính để bàn hoặc trang web.

Trong ví dụ của bạn, người dùng có thể chạy trực tiếp mã SQL trên cơ sở dữ liệu của bạn bằng cách tạo các câu lệnh trong txtSalary .

Ví dụ:nếu họ viết 0 OR 1=1 , SQL được thực thi sẽ là

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

theo đó tất cả EmpSalary sẽ được trả lại.

Hơn nữa, người dùng có thể thực hiện các lệnh tồi tệ hơn nhiều đối với cơ sở dữ liệu của bạn, bao gồm cả việc xóa nó Nếu họ viết 0; Drop Table employee :

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

Bảng employee sau đó sẽ bị xóa.

Trong trường hợp của bạn, có vẻ như bạn đang sử dụng .NET. Sử dụng các tham số dễ dàng như:

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

Chỉnh sửa ngày 4 tháng 4 năm 2016:

Theo nhận xét của George Stocker, tôi đã thay đổi mã mẫu để không sử dụng AddWithValue . Ngoài ra, bạn nên bọc IDisposable s trong using tuyên bố.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TAN () Ví dụ trong SQL Server

  2. Làm cách nào để chọn từ danh sách các giá trị trong SQL Server

  3. SQLServer so với StateServer cho hiệu suất trạng thái phiên ASP.NET

  4. Cách sử dụng tìm kiếm ngữ nghĩa trong SQL Server

  5. Cách tổng hợp trường thời gian trong SQL Server