Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa kita selalu lebih suka menggunakan parameter dalam pernyataan SQL?

Menggunakan parameter membantu mencegah serangan SQL Injection ketika database digunakan bersama dengan antarmuka program seperti program desktop atau situs web.

Dalam contoh Anda, pengguna dapat langsung menjalankan kode SQL di database Anda dengan membuat pernyataan di txtSalary .

Misalnya, jika mereka menulis 0 OR 1=1 , SQL yang dieksekusi adalah

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

dimana semua gaji akan dikembalikan.

Selanjutnya, pengguna dapat melakukan perintah yang jauh lebih buruk terhadap database Anda, termasuk menghapusnya Jika mereka menulis 0; Drop Table employee :

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

Tabel employee kemudian akan dihapus.

Dalam kasus Anda, sepertinya Anda menggunakan .NET. Menggunakan parameter semudah:

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

Sunting 25-04-2016:

Sesuai komentar George Stocker, saya mengubah kode sampel untuk tidak menggunakan AddWithValue . Selain itu, biasanya Anda disarankan untuk membungkus IDisposable s di using pernyataan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin untuk melakukan banyak pembaruan dengan satu pernyataan SQL UPDATE?

  2. Menggunakan Variabel dalam Query OPENROWSET

  3. Pemicu untuk mencegah Penyisipan untuk data duplikat dari dua kolom

  4. Kesalahan SSMS 2016 Mengimpor Azure SQL v12 bacpac:kunci master tanpa kata sandi tidak didukung

  5. Memahami Alias ​​Kolom di Select Query di SQL Server - Tutorial SQL Server / TSQL Bagian 115