पैरामीटर का उपयोग करने से SQL इंजेक्शन हमलों को रोकने में मदद मिलती है जब डेटाबेस का उपयोग प्रोग्राम इंटरफ़ेस जैसे डेस्कटॉप प्रोग्राम या वेब साइट के संयोजन में किया जाता है।
आपके उदाहरण में, उपयोगकर्ता txtSalary
में स्टेटमेंट तैयार करके सीधे आपके डेटाबेस पर SQL कोड चला सकता है ।
उदाहरण के लिए, अगर उन्हें 0 OR 1=1
write लिखना है , निष्पादित SQL होगा
SELECT empSalary from employee where salary = 0 or 1=1
जिससे सभी empवेतन वापस कर दिए जाएंगे।
इसके अलावा, कोई उपयोगकर्ता आपके डेटाबेस के विरुद्ध कहीं अधिक खराब कमांड निष्पादित कर सकता है, जिसमें इसे हटाना भी शामिल है यदि उन्होंने 0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
टेबल employee
तब हटा दिया जाएगा।
आपके मामले में, ऐसा लगता है कि आप .NET का उपयोग कर रहे हैं। पैरामीटर का उपयोग करना उतना ही आसान है:
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
संपादित करें 2016-4-25:
जॉर्ज स्टॉकर की टिप्पणी के अनुसार, मैंने उपयोग न करने के लिए नमूना कोड बदल दिया AddWithValue
. साथ ही, आमतौर पर यह अनुशंसा की जाती है कि आप IDisposable
. को लपेट लें में using
बयान।