क्या मैं पैरामीटर का उपयोग करके सभी एसक्यूएल-इंजेक्शन हमलों से बच सकता हूं?
और इस मामले में एसक्यूएल इंजेक्शन में किसी चीज के बारे में चिंता न करें?
या क्या ऐसे कुछ हमले हैं जिन्हें प्रोग्रामर के हिस्से पर अधिक देखभाल की आवश्यकता है?क्या मैं पैरामीटर का उपयोग करके सभी एसक्यूएल-इंजेक्शन हमलों से बच सकता हूं?
उत्तर
नहीं, आप पैरामीटर का उपयोग करके सभी एसक्यूएल इंजेक्शन हमलों से बच नहीं सकते हैं। डायनामिक एसक्यूएल असली मुद्दा है, और यह संग्रहीत प्रक्रियाओं के साथ-साथ आपके एप्लिकेशन कोड में भी हो सकता है।
उदा।, यह एक एसक्यूएल इंजेक्शन हमले के लिए प्रवण है: आपकी पैरामीटरयुक्त क्वेरी एक उपयोगकर्ता नाम को संग्रहीत प्रक्रिया में पास करती है, और संग्रहीत प्रक्रिया के भीतर पैरामीटर को SQL कमांड से जोड़ा जाता है और फिर निष्पादित किया जाता है।
कई प्रकार के एसक्यूएल इंजेक्शन हमलों के उदाहरण के लिए, यह SQL Injection Cheat Sheet देखें। आप देखेंगे कि सिंगल कोट्स से बचने से बस सतह खरोंच हो रही है, और इसके आसपास कई तरीके हैं।
यदि आप उन पैरामीटर के साथ गतिशील एसक्यूएल क्वेरी बनाने जा रहे हैं (उदाहरण के लिए संग्रहीत प्रक्रिया में पास किया गया है) तो सावधानी बरतने पर एसक्यूएल इंजेक्शन का मौका मिलता है।
हां और नहीं। हां, यदि आपके सभी SQL कथन वास्तव में स्थिर हैं और केवल पैरामीटर का उपयोग करते हैं, तो आप SQL इंजेक्शन हमलों से 100% सुरक्षित हैं।
समस्या तब आती है जब पैरामीटर स्वयं गतिशील SQL कथन बनाने के लिए उपयोग किए जाते हैं। एक उदाहरण एक संग्रहित प्रक्रिया होगी जो अलग-अलग विकल्पों की भीड़ पूछने के लिए गतिशील रूप से एक SQL कथन उत्पन्न करती है, जहां एक एकल मोनोलिथिक कथन अव्यवहारिक होगा। हालांकि इस समस्या के बेहतर समाधान हैं, यह एक आम बात है।
100%, जो मानते हैं कि एमएस या नोवेल ने कोई गलती नहीं की है। –
तैयार डेटाबेस का उपयोग करके आप हमेशा एसक्यूएल इंजेक्शन के जोखिम को कम कर सकते हैं, बशर्ते आपका डेटाबेस इंजन उनका समर्थन करे।
वैसे भी, तैयार बयान एसक्यूएल इंजेक्शन को अवरुद्ध करने का शायद सबसे सुरक्षित तरीका है।
हाँ आप मापदंडों का उपयोग करके सभी एसक्यूएल इंजेक्शन हमलों से बचने कर सकते हैं, जब तक कि आप पैरामीटर का उपयोग कॉल स्टैक नीचे विशेष रूप से सभी तरह। उदाहरण के लिए:
- आपका ऐप कोड डेटाबेस में संग्रहीत प्रक्रिया या गतिशील एसक्यूएल को कॉल करता है। सभी मानों को पारित करने के लिए पैरामीटर का उपयोग करना चाहिए।
- संग्रहीत प्रक्रिया या गतिशील एसक्यूएल आंतरिक रूप से किसी अन्य संग्रहीत प्रक्रिया या गतिशील SQL कथन पर कॉल करता है। यह सभी मानों को पारित करने के लिए पैरामीटर का भी उपयोग करना चाहिए।
- कोड से बाहर होने तक विज्ञापन-infinitum दोहराएं।
आप एसक्यूएल सर्वर में प्रोग्रामिंग रहे हैं, तो आप sp_executesql
का उपयोग गतिशील एसक्यूएल निष्पादित करने के लिए कर सकते हैं, और यह आप को परिभाषित करते हैं और बयान निष्पादित किया जा रहा करने के लिए parameterised मूल्यों पारित करेंगे।
+1 मुझे लगता है कि लोग भूल जाते हैं कि आप डायनामिक एसक्यूएल के साथ पैरामीटर का उपयोग कर सकते हैं। – dotjoe
समस्या SQL स्टेटमेंट गतिशील रूप से बना रही है।
उदाहरण के लिए, आप उपयोगकर्ता द्वारा चुने गए कॉलम के आधार पर परिणाम ऑर्डर करना चाहेंगे। अधिकांश डेटाबेस में, आप यहां पैरामीटर का उपयोग नहीं कर सकते ("ORDER BY?" काम नहीं करता है)। तो आपको + कॉलम "ऑर्डर" करना होगा। अब, यदि "कॉलम" स्ट्रिंग है, तो आपके वेब-एप्लिकेशन का उपयोगकर्ता वहां कोड इंजेक्ट कर सकता है (जो आसान नहीं है, लेकिन संभव है)।
- 1. SASS का उपयोग करके, मैं फ़ॉन्ट घोषणा में स्लैश कैरेक्टर से कैसे बच सकता हूं?
- 2. मैं अपने एएसपी.NET एप्लिकेशन में एसक्यूएल इंजेक्शन हमलों से कैसे बच सकता हूं?
- 3. क्या मैं परिवर्तनीय नामों में वर्णों से बच सकता हूं?
- 4. क्या मैं जावा संदेशफॉर्मैट में ब्रेसिज़ से बच सकता हूं?
- 5. मैं AlassetLibrary से स्थान सेवा से कैसे बच सकता हूं?
- 6. क्या मैं लाइट-वेट वेब पेज बनाने के लिए जावा ईई से बच सकता हूं?
- 7. मैं वैश्विक स्थिति से कैसे बच सकता हूं?
- 8. मैं व्यूमोडेल में कमांड क्लटर से कैसे बच सकता हूं?
- 9. मैं गेटटेक्स्ट स्ट्रिंग में '%' वर्ण से कैसे बच सकता हूं?
- 10. मैं याहू ओपनआईड्स के साथ नेट :: ओपनआईडी :: उपभोक्ता का उपयोग करके एन्कोडिंग त्रुटियों से कैसे बच सकता हूं?
- 11. मैं एनएसएसटींग में यूनिकोड वर्णों से कैसे बच सकता हूं?
- 12. UIWebView का उपयोग करके, क्या मैं एक कस्टम फ़ॉन्ट का उपयोग कर सकता हूं?
- 13. मैं संग्रहीत प्रक्रिया को एक पैरामीटर का उपयोग करके "डेटासेट" कैसे वापस कर सकता हूं?
- 14. मैं वीआई में स्लैश चरित्र से कैसे बच सकता हूं?
- 15. प्रवाह नियंत्रण के लिए अपवादों का उपयोग करने से मैं कैसे बच सकता हूं?
- 16. मैं वाईएएमएल में% वर्णों से कैसे बच सकता हूं?
- 17. मैं चींटी में डबल-कोट्स से कैसे बच सकता हूं?
- 18. मैं नाम उलझन से कैसे बच सकता हूं?
- 19. मैं अजीब का उपयोग करके क्या कर सकता हूं कि मैं पर्ल में नहीं कर सकता?
- 20. अमरूद का उपयोग करके मैं यह कैसे कर सकता हूं?
- 21. ज्ञात कैमरा पैरामीटर का उपयोग करके मैटलैब में एक छवि को मैं कैसे रोक सकता हूं?
- 22. nHibernate का उपयोग करके, मैं असामान्य कैसे पढ़ सकता हूं?
- 23. Passport.js का उपयोग करके मैं OAuth के स्टेट पैरामीटर को कैसे एक्सेस कर सकता हूं?
- 24. मैं ब्रूट-फोर्स हमलों को कैसे रोक सकता हूं?
- 25. क्या मैं टेस्टसुइट का उपयोग करते समय ग्रहण में दो बार चलने वाले जूनिट परीक्षणों से बच सकता हूं?
- 26. मैं अजाक्स का उपयोग करके कैलेंडर पर सभी घटनाओं को कैसे लोड कर सकता हूं?
- 27. `<< - 'का उपयोग क्यों कर रहा है और मैं इससे कैसे बच सकता हूं?
- 28. क्या मैं गो में प्रतिबिंब का उपयोग करके एक नया फ़ंक्शन बना सकता हूं?
- 29. गेटस्क्रिप्ट कॉलबैक फ़ंक्शन के अंदर जेनरेट किए गए यूआरएल का उपयोग करके मैं एक नई विंडो कैसे खोल सकता हूं, और पॉप-अप ब्लॉकर्स से बच सकता हूं?
- 30. क्या मैं गिट लॉग आउटपुट में वर्णों से बच सकता हूं?
तो समाधान क्या है? –
@ एमएच: सभी 'साथ' –
को बदलना समाधान गतिशील एसक्यूएल का कभी भी उपयोग नहीं करना है। यदि यह संभव नहीं है, तो आपको यह सुनिश्चित करने के लिए अत्यधिक लंबाई तक जाना होगा कि आप किसी भी स्ट्रिंग से ठीक से बचें जो कि SQL कथन से जुड़ा होगा, और यह भी विचार करें कि डोमेन पर स्ट्रिंग को कैसे घुमाया जा रहा है (उदाहरण के लिए, HTML -> जावास्क्रिप्ट - -> यूआरएल एन्कोडिंग ->), क्योंकि उन परिवर्तनों के कारण अतिरिक्त जटिलताओं हो सकती हैं। – RedFilter