मैंने SQL इंजेक्शन के हमलों पर देखा है कि ऐसा लगता है कि पैरामीरिज्ड क्वेरीज़, विशेष रूप से संग्रहीत प्रक्रियाओं में शामिल हैं, ऐसे हमलों से बचाव का एकमात्र तरीका है। जब मैं काम कर रहा था (अंधेरे युग में वापस) संग्रहीत प्रक्रियाओं को खराब अभ्यास के रूप में देखा गया था, मुख्यतः क्योंकि उन्हें कम रखरखाव के रूप में देखा गया था; कम परीक्षण योग्य; अत्यधिक युग्मित; और एक सिस्टम को एक विक्रेता में बंद कर दिया; ( यह प्रश्न कुछ अन्य कारणों को शामिल करता है)।
यद्यपि जब मैं काम कर रहा था, तो परियोजनाएं इस तरह के हमलों की संभावना से लगभग अनजान थीं; विभिन्न प्रकार के भ्रष्टाचार के खिलाफ डेटाबेस को सुरक्षित करने के लिए विभिन्न नियमों को अपनाया गया। इन नियमों को संक्षेप में प्रस्तुत किया जा सकता है:
- किसी भी क्लाइंट / एप्लिकेशन को डेटाबेस टेबलों तक सीधी पहुंच नहीं थी।
- सभी तालिकाओं तक सभी पहुंच विचारों के माध्यम से थी (और आधार तालिकाओं के सभी अद्यतन ट्रिगर के माध्यम से किए गए थे)।
- सभी डेटा आइटम में एक डोमेन निर्दिष्ट था।
- किसी भी डेटा आइटम को अशक्त होने की अनुमति नहीं दी गई थी - इसका यह अर्थ था कि DBA के अवसर पर उनके दांत पीस रहे थे; लेकिन लागू किया गया था।
- उदाहरण के लिए, भूमिकाओं और अनुमतियों को उचित रूप से स्थापित किया गया था - डेटा को बदलने का अधिकार केवल विचारों को देने के लिए एक प्रतिबंधित भूमिका।
तो SQL इंजेक्शन के हमलों को रोकने में पैराड्राइज्ड प्रश्नों का एक उपयुक्त विकल्प (हालांकि यह विशेष रूप से आवश्यक नहीं है) जैसे (लागू) नियमों का एक सेट है? यदि नहीं, तो क्यों नहीं? क्या डेटाबेस (केवल) विशिष्ट उपायों द्वारा ऐसे हमलों के खिलाफ एक डेटाबेस सुरक्षित किया जा सकता है?
संपादित करें
आरंभिक प्रतिक्रियाओं के प्रकाश में, प्रश्न का जोर थोड़ा बदल गया। आधार प्रश्न अपरिवर्तित है।
EDIT2
पैरामैटराइज़्ड प्रश्नों पर भरोसा करने का दृष्टिकोण सिस्टम पर हमलों के खिलाफ रक्षा में केवल एक परिधीय कदम है। यह मुझे लगता है कि अधिक मौलिक बचाव दोनों वांछनीय हैं, और ऐसे हमलों पर निर्भरता को प्रस्तुत करना आवश्यक नहीं है, या कम महत्वपूर्ण है, यहां तक कि इंजेक्शन के हमलों के खिलाफ विशेष रूप से बचाव करने के लिए भी।
मेरे प्रश्न में निहित दृष्टिकोण डेटाबेस को "आर्मरिंग" पर आधारित था और मुझे पता नहीं था कि क्या यह एक व्यवहार्य विकल्प था। आगे के शोध ने सुझाव दिया है कि ऐसे दृष्टिकोण हैं। मुझे निम्नलिखित स्रोत मिले हैं जो इस प्रकार के दृष्टिकोण को कुछ संकेत प्रदान करते हैं:
http://database-programmer.blogspot.com
http://thehelsinkideclaration.blogspot.com
इन स्रोतों से मैंने जो सिद्धांत सुविधाएँ ली हैं, वे हैं:
- एक व्यापक डेटा शब्दकोश, एक व्यापक सुरक्षा डेटा शब्दकोश के साथ संयुक्त
- डेटा डिक्शनरी से ट्रिगर्स, प्रश्नों और बाधाओं की उत्पत्ति
- कोड को कम करें और डेटा को अधिकतम करें
हालांकि अब तक मेरे पास मौजूद उत्तर बहुत उपयोगी हैं और पैरामैटराइज्ड प्रश्नों की अवहेलना से उत्पन्न होने वाली कठिनाइयों को इंगित करते हैं, अंत में वे मेरे मूल प्रश्न (अब बोल्ड में जोर दिए गए) का जवाब नहीं देते हैं।