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