हर कोई जानता है कि प्रौद्योगिकी की प्रगति के साथ सुरक्षा हर व्यवसाय और सोशल मीडिया प्लेटफॉर्म के लिए बुनियादी और महत्वपूर्ण विशेषता है। लगभग हर व्यवसाय अपने व्यावसायिक डेटा पर रिले करता है, यह डेटा डेटाबेस में संग्रहीत होता है। तो SQL आपके डेटा को हैकर्स से बचाने के लिए तकनीक प्रदान करता है। हम विभिन्न तकनीकों का उपयोग करके अपने वेब साइट डेटा को हैकर्स से बचा सकते हैं। इसी तरह, SQL इंजेक्शन एक हैकिंग तकनीक है। हैकर्स आपके डेटा तक पहुंच सकते हैं, साथ ही वे आपके डेटाबेस में कुछ कोड इंजेक्ट करके आपके सर्वर को क्रैश भी कर सकते हैं। इच्छुक वेब पैकेजों की अनुचित कोडिंग के कारण इस पद्धति को व्यवहार्य बनाया गया है। कुछ नए डेवलपर डेटा फ़ील्ड की खालीपन की जाँच नहीं करते हैं और खाली फ़ील्ड SQL इंजेक्शन का कारण हैं।
इस दृष्टिकोण में हमारे प्रश्नों में प्रश्न चिह्न प्लेसहोल्डर (?) यह बहुत प्रभावी है और, जब तक कि जेडीबीसी प्रेरक बल के कार्यान्वयन के अंदर कोई कीड़ा न हो, कारनामों से प्रतिरक्षित है।
इस तकनीक के लिए एक सरल उदाहरण कोड है:
सार्वजनिक सूची सुरक्षितFindAccountsByCustomerId (स्ट्रिंग ग्राहक आईडी)
अपवाद फेंकता है {
स्ट्रिंग एसक्यूएल = '+' ग्राहक_आईडी, एसीसी_नंबर, शाखा_आईडी, खातों से शेष राशि '+' चुनें जहां ग्राहक_आईडी = ? ' ;
कनेक्शन सी = dataSource.getConnection ();
रेडीडस्टेटमेंट p = c.prepareStatement(sql);
p.setString( 1, ग्राहक आईडी);
परिणामसेट आरएस = p.executeQuery (एसक्यूएल));
// छोड़ा गया - पंक्तियों को संसाधित करें और एक खाता सूची लौटाएं
}
उपरोक्त कोड में तैयार स्टेटमेंट प्राप्त करने के लिए कनेक्शन उदाहरण में उपलब्ध तैयारीस्टेटमेंट () विधि। यह हमें किसी प्रश्न को निष्पादित करने से पहले व्यक्ति द्वारा प्रदत्त मूल्यों को अच्छी तरह से सम्मिलित करने की अनुमति देता है।
पीडीओ और तैयार प्रश्नों का प्रयोग करें।
($conn एक पीडीओ वस्तु है)
$stmt = $conn -> तैयार करें ('tbl Values में INSERT करें (:Id,:name)');
$stmt -> बाइंडवैल्यू (':id', $id);
$ stmt -> बाइंडवैल्यू (': नाम', $ नाम);
$stmt -> निष्पादित ();
तैयार किए गए कथन SQL इंजेक्शन के प्रति लचीला होते हैं, तथ्य पैरामीटर मानों के कारण, जो बाद में एक-एक तरह के प्रोटोकॉल के उपयोग के बाद प्रसारित होते हैं, अब सफलतापूर्वक बचने की आवश्यकता नहीं है। यदि मूल घोषणा टेम्पलेट बाहरी प्रवेश से प्राप्त नहीं होता है, तो SQL इंजेक्शन उत्पन्न नहीं हो सकता है।
कई विकास दल ऑब्जेक्ट रिलेशनल मैपिंग (ओआरएम) ढांचे का उपयोग करना चुनते हैं ताकि एसक्यूएल परिणाम इकाइयों के अनुवाद को कोड ऑब्जेक्ट्स में अतिरिक्त सहज बनाया जा सके। ओआरएम उपकरण अक्सर सुझाव देते हैं कि डेवलपर्स को शायद ही कभी अपने कोड के एसक्यूएल स्टेटमेंट लिखना चाहिए - और ये उपकरण हुड के तहत पैरामीटरयुक्त बयानों का खुशी से उपयोग करते हैं।
def current_user (ईमेल)
# 'उपयोगकर्ता' ऑब्जेक्ट एक सक्रिय रिकॉर्ड ऑब्जेक्ट है जिसे विधियों को ढूंढना है
# स्वचालित रूप से रेल द्वारा उत्पन्न।
User.find_by_email (ईमेल)
समाप्त
उपरोक्त कोड आपको SQL इंजेक्शन या हैकर के हमलों से बचाएगा।
अपने SQL डेटाबेस को इंजेक्शन से रोकने के लिए एक और सरल तरीका एन्क्रिप्टेड डेटाबेस या डेटा है। इसलिए आमतौर पर अपने डेटाबेस क्रेडेंशियल्स को एक अलग रिपोर्ट में सेव करें और यह सुनिश्चित करने के लिए सुरक्षित रूप से एन्क्रिप्ट करें कि हमलावरों को बहुत फायदा नहीं हो सकता है।