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

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

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

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

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

\n\n

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

\n\n

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

\n\n

SQL इंजेक्शन सबसे पुरानी और सबसे खतरनाक कमजोरियों में से एक है। यह तब होता है जब उपयोगकर्ता इनपुट सीधे SQL क्वेरी में डाला जाता है।

\n\n

कमजोर कोड का उदाहरण:

\n
func getUser(db *sql.DB, id string) (*User, error) {\n    row := db.QueryRow("SELECT * FROM users WHERE id = " + id)\n    // ...\n}
\n\n

कैसे ठीक करें:

\n

पैरामीटरीकृत क्वेरी का उपयोग करें:

\n
func getUser(db *sql.DB, id string) (*User, error) {\n    row := db.QueryRow("SELECT * FROM users WHERE id = $1", id)\n    // ...\n}
\n\n

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

\n\n

XSS तब होता है जब अनएस्केप्ड उपयोगकर्ता इनपुट वेब पेज पर प्रदर्शित होता है। Go में, यह अक्सर text/template के बजाय html/template का उपयोग करने पर होता है।

\n\n

कमजोर कोड का उदाहरण:

\n
fmt.Fprintf(w, "<p>नमस्ते, %s</p>", r.URL.Query().Get("name"))
\n\n

कैसे ठीक करें:

\n

स्वचालित एस्केपिंग के लिए html/template का उपयोग करें:

\n
tmpl := template.Must(template.New("").Parse("<p>नमस्ते, {{.}}</p>"))\ntmpl.Execute(w, r.URL.Query().Get("name"))
\n\n

3. क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF)

\n\n

CSRF हमले उपयोगकर्ता को उस साइट पर एक अवांछित कार्रवाई करने के लिए मजबूर करते हैं जहाँ वे प्रमाणित हैं। Go अनुप्रयोग अक्सर CSRF से सुरक्षा के बारे में भूल जाते हैं।

\n\n

समाधान:

\n

gorilla/csrf लाइब्रेरी का उपयोग करें या अपना स्वयं का middleware लागू करें:

\n
import "github.com/gorilla/csrf"\n\nfunc main() {\n    r := mux.NewRouter()\n    r.Use(csrf.Protect([]byte("32-बाइट-कुंजी")))\n    // ...\n}
\n\n

4. असुरक्षित त्रुटि प्रबंधन

\n\n

एक सामान्य गलती उपयोगकर्ता को सिस्टम त्रुटि संदेश लौटाना है, जो अनुप्रयोग की आंतरिक संरचना को उजागर कर सकते हैं।

\n\n

कमजोर कोड का उदाहरण:

\n
if err != nil {\n    http.Error(w, err.Error(), http.StatusInternalServerError)\n}
\n\n

कैसे ठीक करें:

\n
if err != nil {\n    log.Printf("त्रुटि: %v", err)\n    http.Error(w, "आंतरिक सर्वर त्रुटि", http.StatusInternalServerError)\n}
\n\n

5. हेडर के माध्यम से सूचना लीक

\n\n

डिफ़ॉल्ट रूप से, Go सर्वर Go संस्करण, सर्वर प्रकार और अन्य सेवा जानकारी प्रकट कर सकता है।

\n\n

समाधान:

\n
type 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\n

6. गोरूटीन के साथ गलत काम

\n\n

गोरूटीन Go का एक शक्तिशाली उपकरण है, लेकिन उनका गलत उपयोग डेटा रेस (race conditions) और मेमोरी लीक का कारण बन सकता है।

\n\n

कमजोर कोड का उदाहरण:

\n
var counter int\nfor i := 0; i < 1000; i++ {\n    go func() {\n        counter++ // race condition!\n    }()\n}
\n\n

कैसे ठीक करें:

\n
var 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\n

7. पासवर्ड का असुरक्षित भंडारण

\n\n

पासवर्ड को सादे टेक्स्ट में या कमजोर हैश (MD5, SHA1) का उपयोग करके संग्रहीत करना एक गंभीर गलती है।<

ब्लॉग

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