Go अनुप्रयोगों की सुरक्षा: शुरुआती लोगों के लिए शीर्ष 10 कमजोरियाँ
\n\nGo (Golang) उच्च-लोड वेब सेवाओं, माइक्रोसर्विसेज और नेटवर्क अनुप्रयोगों के निर्माण के लिए सबसे लोकप्रिय भाषाओं में से एक है। हालाँकि, किसी भी अन्य भाषा की तरह, Go को सुरक्षा के प्रति सावधानीपूर्वक दृष्टिकोण की आवश्यकता होती है। यदि आप अभी Go सीखना शुरू कर रहे हैं, तो उन बुनियादी कमजोरियों को जानना महत्वपूर्ण है जो आपके अनुप्रयोग को खतरे में डाल सकती हैं। इस लेख में, हम 10 सबसे सामान्य खतरों पर चर्चा करेंगे और दिखाएंगे कि उनसे कैसे बचा जाए।
\n\n1. SQL इंजेक्शन (SQL Injection)
\n\nSQL इंजेक्शन सबसे पुरानी और सबसे खतरनाक कमजोरियों में से एक है। यह तब होता है जब उपयोगकर्ता इनपुट सीधे SQL क्वेरी में डाला जाता है।
\n\nकमजोर कोड का उदाहरण:
\nfunc getUser(db *sql.DB, id string) (*User, error) {\n row := db.QueryRow("SELECT * FROM users WHERE id = " + id)\n // ...\n}\n\nकैसे ठीक करें:
\nपैरामीटरीकृत क्वेरी का उपयोग करें:
\nfunc getUser(db *sql.DB, id string) (*User, error) {\n row := db.QueryRow("SELECT * FROM users WHERE id = $1", id)\n // ...\n}\n\n2. क्रॉस-साइट स्क्रिप्टिंग (XSS)
\n\nXSS तब होता है जब अनएस्केप्ड उपयोगकर्ता इनपुट वेब पेज पर प्रदर्शित होता है। Go में, यह अक्सर text/template के बजाय html/template का उपयोग करने पर होता है।
कमजोर कोड का उदाहरण:
\nfmt.Fprintf(w, "<p>नमस्ते, %s</p>", r.URL.Query().Get("name"))\n\nकैसे ठीक करें:
\nस्वचालित एस्केपिंग के लिए html/template का उपयोग करें:
tmpl := template.Must(template.New("").Parse("<p>नमस्ते, {{.}}</p>"))\ntmpl.Execute(w, r.URL.Query().Get("name"))\n\n3. क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF)
\n\nCSRF हमले उपयोगकर्ता को उस साइट पर एक अवांछित कार्रवाई करने के लिए मजबूर करते हैं जहाँ वे प्रमाणित हैं। Go अनुप्रयोग अक्सर CSRF से सुरक्षा के बारे में भूल जाते हैं।
\n\nसमाधान:
\ngorilla/csrf लाइब्रेरी का उपयोग करें या अपना स्वयं का middleware लागू करें:
import "github.com/gorilla/csrf"\n\nfunc main() {\n r := mux.NewRouter()\n r.Use(csrf.Protect([]byte("32-बाइट-कुंजी")))\n // ...\n}\n\n4. असुरक्षित त्रुटि प्रबंधन
\n\nएक सामान्य गलती उपयोगकर्ता को सिस्टम त्रुटि संदेश लौटाना है, जो अनुप्रयोग की आंतरिक संरचना को उजागर कर सकते हैं।
\n\nकमजोर कोड का उदाहरण:
\nif err != nil {\n http.Error(w, err.Error(), http.StatusInternalServerError)\n}\n\nकैसे ठीक करें:
\nif err != nil {\n log.Printf("त्रुटि: %v", err)\n http.Error(w, "आंतरिक सर्वर त्रुटि", http.StatusInternalServerError)\n}\n\n5. हेडर के माध्यम से सूचना लीक
\n\nडिफ़ॉल्ट रूप से, Go सर्वर Go संस्करण, सर्वर प्रकार और अन्य सेवा जानकारी प्रकट कर सकता है।
\n\nसमाधान:
\ntype secureHandler struct {\n next http.Handler\n}\n\nfunc (h *secureHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n w.Header().Set("X-Content-Type-Options", "nosniff")\n w.Header().Set("X-Frame-Options", "DENY")\n w.Header().Set("X-XSS-Protection", "1; mode=block")\n h.next.ServeHTTP(w, r)\n}\n\n6. गोरूटीन के साथ गलत काम
\n\nगोरूटीन Go का एक शक्तिशाली उपकरण है, लेकिन उनका गलत उपयोग डेटा रेस (race conditions) और मेमोरी लीक का कारण बन सकता है।
\n\nकमजोर कोड का उदाहरण:
\nvar counter int\nfor i := 0; i < 1000; i++ {\n go func() {\n counter++ // race condition!\n }()\n}\n\nकैसे ठीक करें:
\nvar mu sync.Mutex\nvar counter int\nfor i := 0; i < 1000; i++ {\n go func() {\n mu.Lock()\n counter++\n mu.Unlock()\n }()\n}\n\n7. पासवर्ड का असुरक्षित भंडारण
\n\nपासवर्ड को सादे टेक्स्ट में या कमजोर हैश (MD5, SHA1) का उपयोग करके संग्रहीत करना एक गंभीर गलती है।<