जाओ Postgresql में SQL इंजेक्शन रोकें

Oct 02 2020

मैं गो में पोस्टग्रैस्कल इंजेक्शन के मंच के आसपास शोध करता हूं और मुझे नीचे दिए गए SQL इंजेक्शन में कुछ उपयोगी जानकारी मिली:

गोलांग का उपयोग करके SQL में IN लुकअप को कैसे निष्पादित करें?

"डेटाबेस / एसक्यूएल" का उपयोग करते समय मैं गो में SQL इंजेक्शन के हमलों को कैसे रोक सकता हूं?

लेकिन मुझे अभी भी कुछ सलाह की आवश्यकता है क्योंकि गो में मेरा कोड एक अलग तरह के कोड और यूसेज का उपयोग कर रहा है। कुछ usecase / सवाल मैं इस तरह के लिए सलाह की जरूरत है

  1. INSERT INTO a (a1,a2,a3) VALUES (%d,%d,%s)Fmt.Sprintf का उपयोग कर जैसे कई सम्मिलित करने के लिए क्वेरी लूपिंग का उपयोग कर, मुझे पता है कि स्प्रिंट का उपयोग करना खराब है। तो डालने के लिए इस लूप क्वेरी के लिए कोई समाधान है? Ex:INSERT INTO a (a1,a2,a3) VALUES (%d,%d,%s),(%d,%d,%s),(%d,%d,%s)
  2. क्या यह सुरक्षित है कि fmt.Sprintf का उपयोग करें तो क्वेरी उत्पन्न करने के लिए यदि परम की %dजगह उपयोग किया जा रहा है %s?
  3. तैयार स्टेटमेंट और क्वेरी का उपयोग करना सुरक्षित है, लेकिन क्या होगा अगर मैं फ़ंक्शन का उपयोग कर रहा हूं (का उपयोग करके) $1,$2) और फ़ंक्शन नामांकितविक (नामित नाम का उपयोग करके) Ex: Select * from a where text = $1-> इस $1सुरक्षित का उपयोग कर रहा है ? और Ex: Select * from a where text = :text-> क्या यह फ़ंक्शन NamedQuery में सुरक्षित है?

कृपया अपने सलाह दोस्तों की जरूरत है। धन्यवाद!

जवाब

5 KennyGrant Oct 02 2020 at 18:20

सबसे पहले, आमतौर पर डीबी प्लेसहोल्डर्स का उपयोग करना पसंद करते हैं? $ 1 आदि

  1. हाँ, SQL का निर्माण करने के लिए पूर्णांक मापदंडों के साथ fmt.Sprintf का उपयोग करना सुरक्षित है, हालांकि यदि आप कर सकते हैं तो टालने लायक है, लेकिन आपका तीसरा परम% s है - इससे बचें और उपयोग करें?
  2. हाँ, पूर्णांक मापदंडों के साथ fmt.Sprintf का उपयोग करना सुरक्षित है, लेकिन% s या% v कहीं अधिक जोखिम भरा है और मैं इससे बचूंगा, यह नहीं सोच सकता कि आपको इसकी आवश्यकता क्यों है।
  3. यहां प्लेसहोल्डर्स का उपयोग करें, फिर हाँ यह सुरक्षित है।

सामान्य नियम:

  • प्लेसहोल्डर्स का डिफ़ॉल्ट रूप से उपयोग करें,% d का उपयोग करना दुर्लभ होना चाहिए (उदाहरण के लिए आपकी IN क्वेरी में)
  • किसी भी मान्यता या उपयोग से पहले पूर्णांक जैसे प्रकारों में पार्स
  • यदि आप कर सकते हैं तो स्ट्रिंग कॉनैट से बचें, और विशेष रूप से स्ट्रिंग परम से सावधान रहें
  • कॉलम और टेबल के नाम जैसी हार्ड कोड चीजें हमेशा यूजर इनपुट से उत्पन्न नहीं होती हैं (जैसे? सॉर्ट = मिस्ट्रीकलिंग)
  • हमेशा इस बात को मान्य करें कि आपको जो परमर्स मिलते हैं, वे केवल उस उपयोगकर्ता के लिए अधिकृत हैं