मुझे यह पूछने के लिए थोड़ा मूर्खतापूर्ण लगता है क्योंकि मैं दुनिया में एकमात्र व्यक्ति हूं जो इसे प्राप्त नहीं करता है, लेकिन यहां वैसे भी चला जाता है। मैं एक उदाहरण के रूप में पायथन का उपयोग करने जा रहा हूँ। जब मैं कच्चे एसक्यूएल प्रश्नों का उपयोग (मैं आमतौर पर ORMs का उपयोग करें) मैं का उपयोग कर parameterisation उपयोग करते हैं, इस उदाहरण की तरह SQLite:एसक्यूएल क्वेरी पैरामीटरेशन कैसे काम करता है?
विधि एक:
username = "wayne"
query_params = (username)
cursor.execute("SELECT * FROM mytable WHERE user=?", query_params)
मैं इस काम करता है और मैं जानता हूँ कि यह आम तौर पर की सिफारिश की है ऐसा करने का तरीका
विधि बी::
username = "wayne"
cursor.execute("SELECT * FROM mytable WHERE user='%s'" % username)
जहाँ तक मुझे बता सकते हैं मैं एसक्यूएल इंजेक्शन को समझते हैं, के रूप में this Wikipedia article में विस्तार से बताया एक ही बात करने के लिए एक एसक्यूएल इंजेक्शन-कमजोर तरीका कुछ इस तरह होगा। मेरा सवाल बस है: तरीका ए विधि बी के लिए वास्तव में अलग कैसे है? विधि ए का अंतिम परिणाम विधि बी के समान क्यों नहीं है? मुझे लगता है कि cursor.execute()
विधि (पायथन के डीबी-एपीआई विनिर्देश का हिस्सा) इनपुट से बचने और इनपुट की जांच करने का ख्याल रखता है, लेकिन यह कभी भी स्पष्ट रूप से कहीं भी नहीं कहा जाता है। क्या यह संदर्भ में सभी पैरामीटरकरण है? मेरे लिए, जब हम "पैरामीटरेशन" कहते हैं, तो इसका मतलब है "स्ट्रिंग प्रतिस्थापन", जैसे% -formatting। क्या यह गलत है?
मैं संग्रहित प्रक्रियाओं के साथ यह प्रयोग करेंगे लेकिन अकेले यह एक अच्छा सवाल है। थोड़ा सा पढ़ने के बाद मुझे पता चला कि यह कैल्सबीक के नीचे है। पैरामीटरयुक्त क्वेरी पूरे उपयोगकर्ता नाम के रूप में 'वेने, ड्रॉप टेबल उपयोगकर्ता' को निर्देशों के एक और सेट के रूप में देखने के लिए नहीं देखेगी। इस पृष्ठ पर आखिरी टिप्पणी ने मुझे दिखाया कि: http://taylorza.blogspot.com/2009/04/sql-injection-are-parameterized-queries.html – johnny