यदि आप जानते हैं कि SQL इंजेक्शन क्यों होता है, तो आप स्वयं इस प्रश्न का उत्तर देने में सक्षम होंगे।
आइए देखते हैं। CWE SQL इंजेक्शन (CWE-89) का वर्णन करता है इस प्रकार है:
इसके अलावा:
तो मूल रूप से:जेनरेट की गई SQL क्वेरी में बाहरी रूप से प्रभावित इनपुट की व्याख्या नहीं की जाती है। यहां महत्वपूर्ण हिस्सा है:इच्छित के रूप में व्याख्या नहीं की गई ।
यदि किसी उपयोगकर्ता इनपुट को MySQL स्ट्रिंग के रूप में व्याख्या करने का इरादा है शाब्दिक लेकिन ऐसा नहीं है, यह एक SQL इंजेक्शन है। लेकिन ऐसा क्यों होता है?
खैर, स्ट्रिंग लिटरल एक निश्चित सिंटैक्स होता है जिसके द्वारा उन्हें SQL पार्सर द्वारा पहचाना जाता है:
इसके अतिरिक्त:
इसके अतिरिक्त, स्ट्रिंग अक्षर के भीतर उद्धरणों का उपयोग करने में सक्षम होने के लिए:
चूंकि ये सभी बाद में उल्लिखित अनुक्रम स्ट्रिंग अक्षर के लिए विशेष हैं, इसलिए यह आवश्यक है कि कोई भी डेटा, जिसे स्ट्रिंग अक्षर के रूप में व्याख्या करने का इरादा है, इन नियमों के अनुरूप ठीक से संसाधित किया जाता है। इसका विशेष रूप से अर्थ है:यदि उल्लिखित वर्णों में से कोई भी स्ट्रिंग अक्षर में उपयोग करने का इरादा रखता है, तो उन्हें उल्लिखित तरीकों में से एक के रूप में लिखा जाना चाहिए।
इसलिए यदि आप इसे इस तरह से देखते हैं, तो यह सुरक्षा का सवाल भी नहीं है, बल्कि केवल डेटा को संसाधित करने का है ताकि उनकी व्याख्या के रूप में किया जा सके ।
यही बात अन्य शाब्दिकों के साथ-साथ SQL के अन्य पहलुओं पर भी लागू होती है।
तो आपके प्रश्न के बारे में क्या?
हाँ, यह SQL इंजेक्शन से सुरक्षित होगा। bin2hex
एक स्ट्रिंग देता है जिसमें केवल हेक्साडेसिमल वर्ण होते हैं। और इन वर्णों में से किसी को भी MySQL स्ट्रिंग अक्षर में उनका उपयोग करते समय विशेष उपचार की आवश्यकता नहीं होती है।
लेकिन गंभीरता से, कोई भी इन बोझिल स्वरूपण तकनीक का उपयोग क्यों करना चाहेगा जब पुस्तकालय और ढांचे जो पैरामीटरयुक्त/तैयार बयान जैसी सुविधाजनक तकनीकों की आपूर्ति करते हैं?