Parametrelerin kullanılması, veritabanı bir masaüstü programı veya web sitesi gibi bir program arabirimi ile birlikte kullanıldığında SQL Enjeksiyon saldırılarını önlemeye yardımcı olur .
Örneğinizde, bir kullanıcı içinde ifadeler oluşturarak SQL kodunu doğrudan veritabanınızda çalıştırabilir txtSalary
.
Örneğin, yazacaklarsa 0 OR 1=1
, yürütülen SQL
SELECT empSalary from employee where salary = 0 or 1=1
böylece tüm maaşlar iade edilecektir.
Dahası, bir kullanıcı veritabanınıza karşı çok daha kötü komutlar uygulayabilir, bunu silmek de dahil olmak üzere 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
Tablo employee
daha sonra silinecektir.
Sizin durumunuzda, .NET kullanıyormuşsunuz gibi görünüyor. Parametreleri kullanmak şu kadar kolaydır:
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
2016-4-25'i düzenleyin:
George Stocker'in yorumuna göre, örnek kodu kullanmamak için değiştirdim AddWithValue
. Ayrıca, genellikle sarmak önerilir IDisposable
içinde s using
ifadeleri.