याद रखें कि SQL इंजेक्शन शत्रुतापूर्ण स्ट्रिंग्स को कमांड के रूप में व्याख्या किए जाने के कारण होते हैं, न कि कमांड को ब्लॉक करके। क्या आप सुनिश्चित हैं कि आपको मूल स्ट्रिंग वापस मिल रही है, न कि कड़े संस्करण?
उदाहरण के लिए इन दोनों में बहुत बड़ा अंतर है:"test"
और "'test'"
।
आम तौर पर केवल हानिकारक पात्र ही बच जाते हैं, बाकी को वैसे ही छोड़ दिया जाता है।
निम्न-स्तरीय ड्राइवर का उपयोग करने से सबसे अच्छा बचा जाता है। Sequelize जैसी लाइब्रेरी आज़माएं और उपयोग करें कुछ अमूर्तता और अधिक सहायता प्रदान करने के लिए। वह मॉड्यूल प्लेसहोल्डर स्टेटमेंट का समर्थन करता है जो आम तौर पर एक गैर-मुद्दे से बचने के लिए होता है, इसे स्वचालित रूप से नियंत्रित किया जाता है।
प्रतिस्थापन वाली कच्ची क्वेरी पर अनुभाग देखें जहां आप ऐसा करने की क्षमता रखते हैं:
sequelize.query('SELECT * FROM projects WHERE status = ?',
{ replacements: ['active'], type: sequelize.QueryTypes.SELECT }
).then(function(projects) {
console.log(projects)
})
उपयोगकर्ता डेटा के लीक होने का कोई खतरा नहीं है क्योंकि आपने इसे एक स्पष्ट मूल्य के रूप में आपूर्ति की है जिसे ठीक से संभाला जाता है, न कि क्वेरी में एक इनलाइन स्ट्रिंग।