Go अनुप्रयोगों की सुरक्षा: शीर्ष 10 कमजोरियाँ और उनसे कैसे बचें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go अनुप्रयोगों की सुरक्षा: शीर्ष 10 कमजोरियाँ और सुरक्षा के तरीके



Go (Golang) भाषा ने अपनी उच्च प्रदर्शन, सरलता और अंतर्निहित सुरक्षा तंत्रों के कारण लोकप्रियता हासिल की है। हालाँकि, किसी भी अन्य भाषा की तरह, यह डेवलपर को सभी संभावित खतरों से नहीं बचाती है। डिज़ाइन की त्रुटियाँ, बाहरी डेटा के साथ काम करते समय असावधानी और मानक पुस्तकालयों का गलत उपयोग गंभीर कमजोरियाँ पैदा कर सकता है। इस लेख में, हम Go अनुप्रयोगों की शीर्ष 10 सबसे गंभीर कमजोरियों पर चर्चा करेंगे, कोड उदाहरण देंगे और बताएंगे कि उनसे कैसे बचा जाए।



1. SQL-इंजेक्शन (SQL Injection)



database/sql पैकेज की उपलब्धता के बावजूद, डेवलपर्स अक्सर SQL क्वेरी बनाते समय स्ट्रिंग संयोजन (concatenation) की गलती करते हैं। यह एक क्लासिक कमजोरी है जो हमलावर को मनमाना SQL कोड निष्पादित करने की अनुमति देती है।



असुरक्षित कोड:

// खतरनाक: स्ट्रिंग संयोजनfunc getUser(w http.ResponseWriter, r *http.Request) {    username := r.URL.Query().Get("username")    query := "SELECT * FROM users WHERE username = '" + username + "'"    rows, err := db.Query(query)    // ...}


पैरामीटरीकरण के साथ सुरक्षित कोड:

func getUser(w http.ResponseWriter, r *http.Request) {    username := r.URL.Query().Get("username")    // प्लेसहोल्डर का उपयोग करें    query := "SELECT * FROM users WHERE username = $1"    rows, err := db.Query(query, username)    // ...}


सिफारिश: हमेशा पैरामीटरीकृत क्वेरी का उपयोग करें। SQL स्ट्रिंग में कभी भी उपयोगकर्ता इनपुट को संयोजित न करें।



2. क्रॉस-साइट स्क्रिप्टिंग (XSS)



यदि आपका Go अनुप्रयोग सर्वर पर HTML रेंडर करता है (उदाहरण के लिए, html/template के साथ), तो आउटपुट को एस्केप करना आवश्यक है। अंतर्निहित text/template पैकेज ऐसा नहीं करता है।



असुरक्षित कोड:

// text/template का उपयोग खतरनाक हैtmpl, _ := template.New("test").Parse("<h1>{{.Name}}</h1>")tmpl.Execute(w, map[string]string{"Name": "<script>alert('XSS')</script>"})


सुरक्षित कोड:

// HTML टेम्पलेट के लिए हमेशा html/template का उपयोग करेंimport "html/template"tmpl, _ := template.New("test").Parse("<h1>{{.Name}}</h1>")tmpl.Execute(w, map[string]string{"Name": "<script>alert('XSS')</script>"})// आउटपुट: &lt;script&gt;alert('XSS')&lt;/script&gt;


सिफारिश: HTML के साथ काम करने के लिए केवल html/template का उपयोग करें। हमेशा उपयोगकर्ता इनपुट को मान्य करें और एस्केप करें, खासकर यदि इसे टैग विशेषताओं या JavaScript में आउटपुट किया जाता है।



3. Race Condition (दौड़ की स्थिति)



Go एक समवर्ती (concurrent) भाषा है, और race condition सबसे आम समस्याओं में से एक है। यह डेटा भ्रष्टाचार, मेमोरी लीक और अप्रत्याशित विफलताओं का कारण बन सकता है।



असुरक्षित कोड:

var counter int

func increment() { for i := 0; i < 1000; i++ { counter++ // गैर-परमाणु संक्रिया }}

func main() { go increment() go increment()}


म्यूटेक्स के साथ सुरक्षित कोड:

var (    counter int    mu      sync.Mutex)

func increment() { for i := 0; i < 1000; i++ { mu.Lock() counter++ mu.Unlock() }}

func main() { go increment() go increment()}


सिफारिश: sync.Mutex, sync.RWMutex या परमाणु संक्रियाओं (sync/atomic) का उपयोग करें। दौड़ का पता लगाने के लिए -race फ्लैग के साथ परीक्षण चलाएँ।



4. Path Traversal (पथ भ्रमण)



यह कमजोरी तब उत्पन्न होती है जब अनुप्रयोग उचित जाँच के बिना फ़ाइल पथ बनाने के लिए उपयोगकर्ता इनपुट का उपयोग करता है।



असुरक्षित कोड:

func serveFile(w http.ResponseWriter, r *http.Request) {    f                

ब्लॉग

पुस्तक अनुशंसाएँ