जिस तरह से मैं इसे देखता हूं, SQL इंजेक्शन के हमलों को रोका जा सकता है:
- ध्यान से स्क्रीनिंग, फ़िल्टरिंग, एन्कोडिंग इनपुट (एसक्यूएल में प्रविष्टि से पहले)
- तैयार किए गए कथनों / परिमाणित प्रश्नों का उपयोग करना
मुझे लगता है कि प्रत्येक के लिए पेशेवरों और विपक्ष हैं, लेकिन क्यों # 2 को हटा दिया गया और इंजेक्शन हमलों को रोकने के लिए डी या वास्तव में तरीका माना जाता है? क्या यह सिर्फ सुरक्षित है और त्रुटि के लिए कम या अन्य कारक थे?
जैसा कि मैं समझता हूं, अगर # 1 का ठीक से उपयोग किया जाता है और सभी कैविटी का ध्यान रखा जाता है, तो यह # 2 के समान प्रभावी हो सकता है।
Sanitizing, फ़िल्टरिंग, और एन्कोडिंग
मेरे हिस्से में कुछ भ्रम था कि सैनिटाइजिंग , फ़िल्टरिंग और एन्कोडिंग का क्या मतलब था। मैं कहूंगा कि मेरे उद्देश्यों के लिए, उपरोक्त सभी विकल्प 1 पर विचार किया जा सकता है। इस मामले में मैं समझता हूं कि सैनिटाइजिंग और फ़िल्टरिंग में इनपुट डेटा को संशोधित करने या त्यागने की क्षमता है , जबकि एन्कोडिंग डेटा के रूप में संरक्षित है , लेकिन इसे एन्कोड करता है इंजेक्शन के हमलों से बचने के लिए ठीक से। मेरा मानना है कि डेटा को बचाना इसे एन्कोडिंग का एक तरीका माना जा सकता है।
लाइब्रेरी को एन्कोडिंग करने के लिए पैरामीटर क्वेरीज़
ऐसे उत्तर हैं जहां अवधारणाओं parameterized queries
और encoding libraries
परस्पर व्यवहार किया जाता है। अगर मैं गलत हूं तो मुझे सुधारो, लेकिन मैं इस धारणा के तहत हूं कि वे अलग हैं।
मेरी समझ यह है कि encoding libraries
, चाहे वे कितने भी अच्छे हों, हमेशा SQL "प्रोग्राम" को संशोधित करने की क्षमता रखते हैं, क्योंकि वे SQL में ही बदलाव कर रहे हैं, इससे पहले कि इसे RDBMS को भेज दिया जाए।
Parameterized queries
दूसरी ओर, SQL प्रोग्राम को RDBMS में भेजें, जो तब क्वेरी का अनुकूलन करता है, क्वेरी निष्पादन योजना को परिभाषित करता है, उन अनुक्रमित अनुक्रमों का चयन करता है जिनका उपयोग किया जाना है, आदि, और फिर डेटा को प्लग करें, RDBMS के अंदर अंतिम चरण के रूप में। अपने आप।
एनकोडिंग लाइब्रेरी
data -> (encoding library)
|
v
SQL -> (SQL + encoded data) -> RDBMS (execution plan defined) -> execute statement
परिमाणित क्वेरी
data
|
v
SQL -> RDBMS (query execution plan defined) -> data -> execute statement
ऐतिहासिक महत्व
कुछ उत्तर उल्लेख करते हैं कि प्रदर्शन के कारणों के लिए ऐतिहासिक रूप से, पैरामीटरयुक्त प्रश्न (PQ) बनाए गए थे, और इंजेक्शन हमलों से पहले जो एन्कोडिंग मुद्दों को लक्षित करते थे, लोकप्रिय हो गए। कुछ बिंदु पर यह स्पष्ट हो गया कि PQ इंजेक्शन हमलों के खिलाफ भी बहुत प्रभावी थे। मेरे प्रश्न की भावना के साथ रखने के लिए, पीक्यू पसंद का तरीका क्यों बना रहा और एसक्यूएल इंजेक्शन हमलों को रोकने के लिए यह अन्य तरीकों से ऊपर क्यों पनपा?