आपके सीधे प्रश्न के उत्तर में:क्या यह कोड SQL इंजेक्शन को रोकता है:नहीं
यहाँ प्रमाण है - इस स्ट्रिंग को प्रीपेयरस्ट्रिंग विधि के माध्यम से पुश करें:
Dim input = "'" & Chr(8) & "; Drop Table TableName; - " & Chr(8) & "-"
Dim output = PrepareString(input)
Console.WriteLine(input)
Console.WriteLine(output)
मैंने डेटाबेस से रिकॉर्ड प्राप्त करने के बजाय पूरी तरह से तैयार SQL स्ट्रिंग को वापस करने के लिए आपके द्वारा पोस्ट की गई GetRecord विधि को संशोधित किया है:
Console.WriteLine(GetRecord(output))
और यह आउटपुट है
Input = ; Drop Table TableName; --
Output = '; Drop Table TableName; --
Query = SELECT * FROM TableName WHERE Key = ''; Drop Table TableName; --'
कोड की 1 अतिरिक्त पंक्ति जोड़ें:
My.Computer.Clipboard.SetText(input)
और आपको अपने SQL इंजेक्शन को पूरा करने के लिए वेबसाइट पर अपने इनपुट फ़ील्ड में पेस्ट करने के लिए सीधे अपने क्लिपबोर्ड पर कॉपी की गई स्ट्रिंग मिल गई है:
'; Drop Table TableName; - -
[यह देखते हुए कि StackOverflow द्वारा पोस्ट आउटपुट से नियंत्रण वर्णों को हटा दिया गया है, इसलिए आपको अपना आउटपुट बनाने के लिए कोड उदाहरण का पालन करना होगा]
प्रीपेस्ट्रिंग विधि चलाने के बाद, इसका सटीक वही आउटपुट होगा - Chr (8) ASCII कोड बैकस्पेस है जो अतिरिक्त "'" को हटा देगा जिसे आप मेरे साथ जोड़ रहे हैं जो आपकी स्ट्रिंग को बंद कर देगा और फिर मैं हूं अंत में जो कुछ भी मैं चाहता हूं उसे जोड़ने के लिए स्वतंत्र। आपका प्रीपेस्ट्रिंग मेरा - क्योंकि मैं वास्तव में उपयोग कर रहा हूं - - स्पेस को हटाने के लिए बैकस्पेस कैरेक्टर के साथ नहीं देखता है।
परिणामी SQL कोड जो आप बना रहे हैं, तब मेरे ड्रॉप टेबल स्टेटमेंट को बिना किसी बाधा के निष्पादित करेगा और आपकी शेष क्वेरी को तुरंत अनदेखा कर देगा।
इसके बारे में मजेदार बात यह है कि आप गैर-मुद्रण योग्य वर्णों का उपयोग मूल रूप से किसी भी वर्ण जांच को बायपास करने के लिए कर सकते हैं जिसे आप आविष्कार कर सकते हैं। इसलिए पैरामीटरयुक्त प्रश्नों का उपयोग करना सबसे सुरक्षित है (जो आपने नहीं पूछा है, लेकिन इससे बचने का सबसे अच्छा तरीका है)।