मुझे एहसास हुआ कि पैरामीटर क्वेरी एसक्यूएल उपयोगकर्ता इनपुट का निर्माण करते समय उपयोगकर्ता इनपुट को साफ करने का सबसे इष्टतम तरीका है, लेकिन मैं सोच रहा हूं कि उपयोगकर्ता इनपुट लेने और किसी भी एकल उद्धरण से बचने और एकल उद्धरण के साथ पूरे स्ट्रिंग के आसपास क्या गलत है। यहाँ कोड है:
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
उपयोगकर्ता द्वारा दर्ज किए गए किसी भी एकल-उद्धरण को डबल सिंगल-कोट्स के साथ बदल दिया जाता है, जो उपयोगकर्ताओं को स्ट्रिंग को समाप्त करने की क्षमता को समाप्त कर देता है, इसलिए कुछ भी वे टाइप कर सकते हैं, जैसे अर्धविराम, प्रतिशत संकेत आदि, सभी स्ट्रिंग का हिस्सा होंगे और वास्तव में कमांड के हिस्से के रूप में निष्पादित नहीं किया गया है।
हम Microsoft SQL Server 2000 का उपयोग कर रहे हैं, जिसके लिए मेरा मानना है कि एकल-उद्धरण स्ट्रिंग स्ट्रिंग सीमांकक और स्ट्रिंग सीमांकक से बचने का एकमात्र तरीका है, इसलिए उपयोगकर्ता प्रकारों में कुछ भी निष्पादित करने का कोई तरीका नहीं है।
मुझे इसके खिलाफ SQL इंजेक्शन हमले शुरू करने का कोई तरीका नहीं दिखता है, लेकिन मुझे लगता है कि अगर यह बुलेटप्रूफ होता जैसा कि मुझे लगता है कि किसी और ने पहले ही सोचा होगा और यह आम बात होगी।
इस कोड में क्या गलत है? क्या इस सैनिटाइजेशन तकनीक से पहले एक एसक्यूएल इंजेक्शन हमला करने का एक तरीका है? नमूना उपयोगकर्ता इनपुट जो इस तकनीक का फायदा उठाते हैं, बहुत उपयोगी होगा।
अपडेट करें:
मुझे अभी भी इस कोड के खिलाफ SQL इंजेक्शन हमले को प्रभावी ढंग से लॉन्च करने का कोई तरीका नहीं पता है। कुछ लोगों ने सुझाव दिया कि एक बैकस्लैश एक एकल-उद्धरण से बच जाएगा और दूसरे को स्ट्रिंग को समाप्त करने के लिए छोड़ देगा ताकि शेष स्ट्रिंग को SQL कमांड के हिस्से के रूप में निष्पादित किया जा सके, और मुझे पता है कि यह विधि SQL को इंजेक्ट करने के लिए काम करेगी एक MySQL डेटाबेस, लेकिन SQL Server 2000 में एकमात्र तरीका (जो मुझे मिल गया है) एक एकल-उद्धरण से बचने के लिए किसी अन्य एकल-उद्धरण के साथ है; बैकस्लैश ऐसा नहीं करेंगे।
और जब तक एकल-उद्धरण से बचने को रोकने का कोई तरीका नहीं है, तब तक शेष उपयोगकर्ता इनपुट में से कोई भी निष्पादित नहीं किया जाएगा, क्योंकि यह सभी एक सन्निहित स्ट्रिंग के रूप में लिया जाएगा।
मैं समझता हूं कि इनपुट को सैनिटाइज करने के बेहतर तरीके हैं, लेकिन मैं वास्तव में यह जानने में अधिक दिलचस्पी रखता हूं कि मेरे द्वारा प्रदान की गई विधि क्यों काम नहीं करेगी। अगर किसी को इस स्वच्छता पद्धति के खिलाफ SQL इंजेक्शन हमले को माउंट करने का कोई विशिष्ट तरीका पता है तो मैं इसे देखना पसंद करूंगा।