Menggunakan parameter membantu mencegah serangan SQL Injection saat 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 akan dieksekusi adalah
SELECT empSalary from employee where salary = 0 or 1=1
dimana semua gaji kaisar akan dikembalikan.
Lebih lanjut, 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
tersebut kemudian akan dihapus.
Dalam kasus Anda, sepertinya Anda menggunakan .NET. Menggunakan parameter semudah:
C #
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();
}
VB.NET
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
Edit 2016-4-25:
Sesuai komentar George Stocker, saya mengubah kode sampel agar tidak digunakan AddWithValue
. Juga, secara umum disarankan agar Anda membungkus IDisposable
s dalam using
pernyataan.