"सैनिटाइज़" . न करें SQL इंजेक्शन को रोकने के साधन के रूप में इनपुट - प्लेसहोल्डर का उपयोग करें (या उचित पलायन) , हमेशा। स्तिर रहो। सुरक्षित रहना। समस्या पहले ही हल हो चुकी है।
यह मामला "सुरक्षित" होगा सीमित डोमेन के कारण base64_encode का समारोह। हालांकि..
यह है खराब अभ्यास और बेस 64-एन्कोडेड मानों को संग्रहीत करना (जैसे कि दिखाई गई क्वेरी काम कर सकती है) में कई नकारात्मक होते हैं प्रभाव के रूप में यह बदलता है संग्रहीत जानकारी:यह नष्ट मानों का क्रम, जानकारी को तुच्छ रूप से खोजने योग्य नहीं . बनाता है , एक अतिरिक्त . की आवश्यकता है "एन्कोड/डीकोड" चरण, और यहां तक कि उपभोग करता है अधिक स्थान - आउच!
इस प्रकार, जबकि बेस 64-एन्कोड डेटा के लिए विशिष्ट मामले हो सकते हैं, यह दृष्टिकोण नहीं है SQL Injection को कम करने के साधन के रूप में उपयुक्त ।
समस्या एक पाठ प्रोटोकॉल . के माध्यम से SQL तक पहुँचने के कारण है जहां क्वेरी कमांड/आकृति और मान मिश्रित हैं। सही . का उपयोग बचने की तकनीकें (जैसे mysql_real_escape_string ) यह सुनिश्चित करके इसे ठीक करता है कि जानकारी बच गई है ताकि SQL टेक्स्ट पार्स . हो जैसा इरादा था - हालांकि, बेस 64-एन्कोड चरण के विपरीत यह नहीं करता है वास्तव में प्रदान की गई जानकारी को बदलें!
यह बिल्कुल है प्लेसहोल्डर क्या प्रदान करते हैं ! प्लेसहोल्डर द . हैं सार्वभौमिक रूप से सही दृष्टिकोण और प्रोत्साहित किया जाना चाहिए। प्लेसहोल्डर क्वेरी और मान भेजने की अनुमति दें डेटाबेस के लिए अलग से जब पुस्तकालय/डेटाबेस द्वारा समर्थित हो; और अन्यथा बचकर अनुकरण किया जाता है। प्लेसहोल्डर का सही उपयोग समाप्त करता है SQL इंजेक्शन और SQL कमांड टेक्स्ट में मानों को इंटरमिक्स करने के लिए उपयोगकर्ता कोड की आवश्यकता, जो प्रश्नों को लिखना और बनाए रखना भी आसान बना सकता है।
"व्यक्तिगत प्रोग्रामर" को भयानक प्रश्न लिखने से रोकने के लिए, समाधान यह है कि रोकें कोड में इधर-उधर बिखरने से तदर्थ क्वेरी:डेटा-एक्सेस संचालन को डेटा एक्सेस लेयर में एकत्रित करें ( दाल) (संभवतः एक ओआरएम के संयोजन के साथ) और केवल प्रासंगिक कार्यों को उजागर करते हैं, जिससे डीएएल के भीतर एसक्यूएल का उचित उपयोग सुनिश्चित होता है। सरल परियोजनाओं में डीएएल स्वच्छता और अन्य सत्यापन तर्क के लिए व्यापार नियमों को केंद्रीय रूप से प्रबंधित करने के लिए भी एक उपयुक्त स्थान है।
अधिक सटीक:
-
स्वच्छ करें व्यापार नियमों के लिए मूल्य; इससे "खराब जानकारी" को रोका जा सकता है, जैसे कि एक उपयोगकर्ता नाम जो बहुत छोटा है, जिसमें प्रतिबंधित वर्ण हैं, या अन्यथा व्यावसायिक आवश्यकताओं को पूरा करने में विफल रहता है।
-
प्लेसहोल्डर का उपयोग करें SQL Injection को रोकने के लिए . यह कड़ाई से है डेटा को SQL में स्थानांतरित करने से संबंधित है और उसमें मौजूद जानकारी पर कोई असर नहीं पड़ता है।
जबकि MySQL 5.6.1 FROM_BASE64 , जैसे कि एन्कोडिंग का उपयोग केवल SQL कमांड टेक्स्ट में किया जा सकता है, यह अभी भी एक अतिरिक्त स्पष्ट डिकोड चरण जोड़ता है और ऐसी एन्कोडिंग योजना का उपयोग करते समय क्वेरी को जटिल बनाता है। यह बेस 64 दृष्टिकोण बस नहीं है आवश्यक है, क्योंकि SQL इंजेक्शन को रोकने के लिए पहले से ही सिद्ध तकनीकें हैं, और प्रारंभिक प्रश्न में प्रस्तावित नहीं किया गया था।