SQL को पैरामीटर पास करने से आप एक डायनामिक SQL स्ट्रिंग बनाने से बच जाते हैं।
डायनेमिक SQL स्टेटमेंट बनाना एक बहुत बड़ा सुरक्षा जोखिम है क्योंकि लोग आपके एप्लिकेशन में अपना स्वयं का SQL कोड इंजेक्ट कर सकते हैं, संभवतः आपके डेटा के विरुद्ध अवांछनीय कमांड निष्पादित कर सकते हैं।
संभावित SQL इंजेक्शन हमलों के कुछ अच्छे नमूने यहां दिए गए हैं:
उदाहरण के लिए SQL इंजेक्शन अटैक्स
SQL स्टेटमेंट में पैरामीटर पास करने के दो तरीके हैं। एक संग्रहीत प्रक्रियाओं का उपयोग करना है जैसा आपने उल्लेख किया है। दूसरा पैरामीटरयुक्त प्रश्नों का उपयोग करना है (जो वास्तव में मुझे पसंद है)।
एक पैरामीटरयुक्त क्वेरी वास्तव में .NET में काफी आसान है:
using(SqlConnection conn = new SqlConnection(connString))
{
SqlCommand command =
new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);
command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dt = new DataTable();
adapter.Fill(dt);
}
उस उदाहरण में, पैरामीटर @Username
. था और हमने Parameters
. का इस्तेमाल किया SqlCommand
. का संग्रह मूल्य में पारित करने के लिए आपत्ति।