वास्तव में एक में दो प्रश्न हैं। और शीर्षक से सवाल बहुत बाद में टिप्पणियों में ओपी द्वारा व्यक्त की गई चिंताओं के साथ बहुत कम है।
हालाँकि मुझे पता है कि ओपी के लिए यह उनका विशेष मामला है जो मायने रखता है, Google से आने वाले पाठकों के लिए, अधिक सामान्य प्रश्न का उत्तर देना महत्वपूर्ण है, क्योंकि इसे संक्षिप्त किया जा सकता है "यदि मैं सुनिश्चित करूं कि तैयार किए गए बयानों के रूप में सुरक्षित है कि मैं जो हर शाब्दिक हूं वह सुरक्षित है? ”। इसलिए, मैं इस उत्तरार्द्ध पर ध्यान केंद्रित करना चाहूंगा। और जवाब है
निश्चित रूप से नहीं।
स्पष्टीकरण यह नहीं है कि ज्यादातर पाठक चाहेंगे, लेकिन मैं पूरी कोशिश करूंगा।
मैं कुछ समय से इस मामले पर विचार कर रहा था, जिसके परिणामस्वरूप लेख आया (हालांकि PHP वातावरण पर आधारित है) जहां मैंने सब कुछ संक्षेप में प्रस्तुत करने की कोशिश की। यह मेरे लिए हुआ कि एसक्यूएल इंजेक्शन से सुरक्षा का प्रश्न अक्सर कुछ संबंधित लेकिन संकरे विषयों की ओर होता है, जैसे कि स्ट्रिंग बचना, टाइप कास्टिंग और ऐसे। यद्यपि कुछ उपायों को स्वयं द्वारा उठाए जाने पर सुरक्षित माना जा सकता है, लेकिन कोई प्रणाली नहीं है, न ही एक सरल नियम का पालन करना है। जो इसे बहुत फिसलन जमीन बनाता है, डेवलपर के ध्यान और अनुभव पर बहुत अधिक डालता है।
एसक्यूएल इंजेक्शन के सवाल को कुछ विशेष वाक्यविन्यास मुद्दे के मामले में सरल नहीं किया जा सकता है। यह सोचने के लिए इस्तेमाल किए गए औसत डेवलपर की तुलना में व्यापक है। यह एक पद्धतिगत प्रश्न भी है। यह न केवल "हमें किस विशेष प्रारूपण को लागू करना है", बल्कि " यह कैसे करना है" भी है।
(इस दृष्टिकोण से, जॉन स्केट के एक लेख ने अन्य उत्तर में उद्धृत किया है कि यह अच्छे के बजाय बुरा है, क्योंकि यह फिर से किसी किनारे के मामले में नाइटपैकिंग कर रहा है, किसी विशेष वाक्यविन्यास मुद्दे पर ध्यान केंद्रित करता है और समस्या को संबोधित करने में विफल रहता है।)
जब आप सुरक्षा के सवाल को पूरी तरह से नहीं, बल्कि विभिन्न वाक्यविन्यास मुद्दों के एक सेट के रूप में संबोधित करने का प्रयास कर रहे हैं, तो आप समस्याओं का सामना कर रहे हैं।
- संभावित स्वरूपण विकल्पों की सूची वास्तव में बहुत बड़ी है। इसका मतलब है कि कोई आसानी से कुछ अनदेखी कर सकता है। या उन्हें भ्रमित करें ( उदाहरण के लिए पहचानकर्ता के लिए स्ट्रिंग भागने का उपयोग करके )।
- समाकलन का अर्थ है कि प्रोग्रामर द्वारा सभी सुरक्षा उपाय किए जाने हैं, न कि प्रोग्राम। यह समस्या अकेले कई परिणामों की ओर ले जाती है:
- इस तरह का एक प्रारूपण मैनुअल होता है। मैनुअल का मतलब है अत्यंत त्रुटि प्रवण। कोई बस आवेदन करना भूल सकता है।
- इसके अलावा, कुछ केंद्रीकृत कार्यों में प्रारूपण प्रक्रियाओं को स्थानांतरित करने का प्रलोभन है, चीजों को और अधिक गड़बड़ाना और डेटा को खराब करना जो डेटाबेस में नहीं जा रहा है।
- जब एक से अधिक डेवलपर्स शामिल होते हैं, तो समस्याएं दस के कारक से गुणा होती हैं।
- जब संघनन का उपयोग किया जाता है, तो कोई भी संभावित खतरनाक क्वेरी को नज़र में नहीं बता सकता है: वे सभी संभावित खतरनाक हैं!
उस गड़बड़ के विपरीत, तैयार कथन वास्तव में पवित्र कंघी बनानेवाले की रेती हैं:
- इसे एक सरल नियम के रूप में व्यक्त किया जा सकता है जिसका पालन करना आसान है।
- यह अनिवार्य रूप से अनिर्वचनीय उपाय है, इसका मतलब है कि डेवलपर हस्तक्षेप नहीं कर सकता है, और, स्वेच्छा से या अनिच्छा से, प्रक्रिया को खराब कर सकता है।
- इंजेक्शन से सुरक्षा वास्तव में तैयार किए गए कथनों का केवल एक पक्ष प्रभाव है, जिसका वास्तविक उद्देश्य वाक्यात्मक रूप से सही कथन का उत्पादन करना है। और एक वाक्यात्मक रूप से सही कथन 100% इंजेक्शन प्रमाण है। फिर भी हमें किसी भी इंजेक्शन की संभावना के बावजूद अपने वाक्यविन्यास को सही होना चाहिए।
- यदि सभी तरह से उपयोग किया जाता है, तो यह डेवलपर के अनुभव की परवाह किए बिना आवेदन की सुरक्षा करता है। कहते हैं, एक चीज है जिसे दूसरा ऑर्डर इंजेक्शन कहा जाता है । और एक बहुत मजबूत भ्रम जो "रक्षा करने के लिए, सभी उपयोगकर्ता आपूर्ति इनपुट से बच " पढ़ता है । एक साथ संयुक्त, वे इंजेक्शन का नेतृत्व करते हैं, अगर कोई डेवलपर यह तय करने के लिए स्वतंत्रता लेता है कि क्या संरक्षित किया जाना चाहिए और क्या नहीं।
(आगे सोचते हुए, मुझे पता चला कि वास्तविक जीवन की जरूरतों के लिए प्लेसहोल्डर्स का वर्तमान सेट पर्याप्त नहीं है और इसे जटिल डेटा संरचनाओं, जैसे सरणियों और यहां तक कि एसक्यूएल कीवर्ड या आइडेंटिफ़ायर, दोनों के लिए बढ़ाया जाना चाहिए, जिन्हें कभी-कभी जोड़ा जाता है। क्वेरी गतिशील रूप से भी, लेकिन एक डेवलपर को इस तरह के एक मामले के लिए निहत्थे छोड़ दिया जाता है, और उसे वापस स्ट्रिंग के पतन के लिए मजबूर किया जाता है लेकिन यह एक और सवाल का मामला है)।
दिलचस्प बात यह है कि इस सवाल का विवाद ढेर अतिप्रवाह की विवादास्पद प्रकृति से उकसाया गया है। साइट का विचार उपयोगकर्ताओं से विशेष प्रश्नों का उपयोग करना है जो खोज से आने वाले उपयोगकर्ताओं के लिए उपयुक्त सामान्य उद्देश्य उत्तरों का डेटाबेस प्राप्त करने के लक्ष्य को प्राप्त करने के लिए सीधे पूछते हैं । प्रति विचार बुरा नहीं है , लेकिन यह इस तरह की स्थिति में विफल रहता है: जब कोई उपयोगकर्ता एक बहुत ही संकीर्ण प्रश्न पूछता है , विशेष रूप से एक सहकर्मी के साथ विवाद में तर्क प्राप्त करने के लिए (या यह तय करने के लिए कि क्या यह कोड को फिर से भरने के लायक है)। जबकि अधिकांश अनुभवी प्रतिभागी मिशन को ध्यान में रखते हुए उत्तर लिखने का प्रयास कर रहे हैं स्टैक ओवरफ्लो का अधिक से अधिक, उनके जवाब को यथासंभव अधिक से अधिक पाठकों के लिए अच्छा बनाना, न कि केवल ओपी।