स्ट्रिंग को प्रारूपित करने के बारे में आपके प्रश्न का उत्तर देने के लिए, सरल उत्तर fmt.Sprintfका उपयोग करना है। ए> अपनी स्ट्रिंग की संरचना करने के लिए। हालांकि डीबी प्रश्नों के लिए fmt.Sprintf का उपयोग करने पर एक त्वरित नोट के लिए और नीचे देखें:
उदाहरण:
query := fmt.Sprintf("SELECT id FROM users WHERE login='%s'", login)
err = db.Query(query)
// Equivalent to:
rows, err := db.Query("SELECT id FROM users WHERE login=?", login)
प्रश्नों के लिए इसका उपयोग करके, आप इंजेक्शन से सुरक्षित हैं। कहा जा रहा है, आप इसे संशोधित करने और db.Exec का उपयोग क्रिएशन/अपडेट/डिलीट करने के लिए भी कर सकते हैं। अंगूठे के एक सामान्य नियम के रूप में, यदि आप fmt.Sprintf के साथ db.Exec का उपयोग करते हैं और पहले अपने इनपुट को साफ नहीं करते हैं, तो आप अपने आप को sql इंजेक्शन के लिए खोलते हैं ।
db.Exec के साथ fmt.Sprintf खराब क्यों है, इसके सरल उदाहरण के साथ GoPlay:
https://play.golang.org/p/-IWyymAg_Q
आपको db.Query का इस्तेमाल करना चाहिए या db.Prepare इस तरह के हमले वैक्टर से बचने के लिए उचित तरीके से। इंजेक्शन-सुरक्षित स्निपेट के साथ आने के लिए आपको उपरोक्त कोड नमूने को संशोधित करना पड़ सकता है, लेकिन उम्मीद है कि मैंने आपको आरंभ करने के लिए पर्याप्त दिया है।