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.