GO Code Review #1 : हार्ड-कोडेड क्रेडेंशियल्स सुरक्षा के प्रति संवेदनशील होते हैं
![](https://post.nghiatu.com/assets/images/m/max/724/1*hI515CxuQLgVbUeBIf8m0w.png)
अवलोकन
समीक्षकों ने कोड की गुणवत्ता, रख-रखाव और सर्वोत्तम प्रथाओं के अनुपालन का मूल्यांकन किया। मैं विशेष रूप से संभावित सुरक्षा छिद्रों और मरम्मत की आवश्यकता वाले स्थानों का पता लगाने के लिए चिंतित था। हार्ड-कोडेड क्रेडेंशियल्स के संबंध में, यह रिपोर्ट एक महत्वपूर्ण सुरक्षा मुद्दे पर प्रकाश डालती है।
संवेदनशील कोड उदाहरण
func connect() {
user := "root"
password:= "supersecret" // Sensitive
url := "login=" + user + "&passwd=" + password
}
प्रदान किया गया कोड स्निपेट कनेक्ट () नामक एक फ़ंक्शन प्रतीत होता है जो संभवतः किसी सेवा या सिस्टम के लिए कनेक्शन स्थापित करने के लिए ज़िम्मेदार है। यहाँ कोड का विस्तृत विश्लेषण है:
func connect() {
user := "root"
password := "supersecret" // Sensitive
url := "login=" + user + "&passwd=" + password
}
- संवेदनशील पासवर्ड: क्योंकि यह सीधे स्रोत कोड में दिखाई देता है, हार्ड-कोडित पासवर्ड मान "सुपरसीक्रेट" को संवेदनशील माना जाता है। सुरक्षा कारणों से, पासवर्ड जैसे हार्ड-कोड क्रेडेंशियल्स को स्रोत कोड में डालने की अनुशंसा नहीं की जाती है। कोडबेस तक पहुंच रखने वाला कोई भी व्यक्ति आसानी से पासवर्ड की जांच कर सकता है।
- URL जनरेशन: URL स्ट्रिंग बनाने के लिए उपयोगकर्ता और पासवर्ड चर को अतिरिक्त इनपुट के साथ जोड़ा जाता है। ऐसा लगता है कि उपयोगकर्ता और पासवर्ड मानों के लिए क्वेरी पैरामीटर के साथ, लॉगिन अनुरोध के लिए एक यूआरएल बना रहा है।
- सुरक्षा जोखिम : एक गंभीर सुरक्षा जोखिम तब होता है जब गोपनीय डेटा, जैसे पासवर्ड, सादे पाठ में स्रोत कोड में रखा जाता है। यदि कोडबेस अनधिकृत लोगों द्वारा देखा जाता है या रिपॉजिटरी को हैक कर लिया जाता है तो संवेदनशील डेटा आसानी से लिया जा सकता है और उसका दुरुपयोग किया जा सकता है।
2. क्रेडेंशियल प्रबंधन: जब पासवर्ड सीधे कोड में संग्रहीत होते हैं तो पासवर्ड को आवश्यकतानुसार बदलना या घुमाना मुश्किल होता है। संभावित सुरक्षा दोष हार्ड-कोडेड क्रेडेंशियल्स से उत्पन्न हो सकते हैं जो पासवर्ड बदलने के बाद भी कोडबेस में बने रह सकते हैं।
सिफारिश: संवेदनशील क्रेडेंशियल्स को सुरक्षित रूप से स्टोर और प्रबंधित करने के लिए एक गुप्त प्रबंधन उपकरण या एक सुरक्षित क्रेडेंशियल प्रबंधन समाधान का उपयोग करें। इन समाधानों में सुरक्षित भंडारण, पहुंच प्रबंधन और अन्य सुविधाओं के अलावा स्वचालित गुप्त रोटेशन जैसी क्षमताएं शामिल हैं।
3. इनपुट सत्यापन: किसी भी उपयोगकर्ता इनपुट को मान्य और साफ किया जाना चाहिए, विशेष रूप से URL बनाते समय या डेटाबेस क्वेरी चलाते समय। प्रदान किए गए कोड में इनपुट सत्यापन और स्वच्छता की कमी सिस्टम को SQL इंजेक्शन और URL हेरफेर हमलों जैसी सुरक्षा खामियों के लिए खुला छोड़ देती है।
सिफारिश: ऐसे हमलों को विफल करने के लिए उपयुक्त इनपुट सत्यापन और स्वच्छता रणनीतियों का उपयोग करें। उदाहरण के लिए, पैरामीटरयुक्त प्रश्नों या तैयार कथनों का उपयोग करें, और सुनिश्चित करें कि URL में उपयोगकर्ता द्वारा प्रदान किए गए मान ठीक से एन्कोड किए गए हैं।
4. सुरक्षित पासवर्ड संग्रहण: यह याद रखना महत्वपूर्ण है कि पासवर्ड को सादे पाठ में रखना असुरक्षित है यदि यह कार्य एक बड़ी प्रमाणीकरण योजना का एक घटक है। संग्रहीत किए जाने से पहले, डेटा उल्लंघन की स्थिति में अनधिकृत पहुंच को रोकने के लिए पासवर्ड को सुरक्षित रूप से हैश और नमकीन किया जाना चाहिए।
अनुशंसा: पासवर्ड को सुरक्षित रूप से संग्रहीत और सत्यापित करने के लिए शक्तिशाली पासवर्ड हैशिंग विधियों का उपयोग करें, जैसे bcrypt या Argon2।
अनुरूप समाधान:
func connect() {
user := getEncryptedUser()
password:= getEncryptedPass() // Compliant
url := "login=" + user + "&passwd=" + password
}
- क्रेडेंशियल्स को एक कॉन्फ़िगरेशन फ़ाइल में संग्रहीत करें जिसे कोड रिपॉजिटरी में धकेला नहीं गया है।
- एक डेटाबेस में क्रेडेंशियल स्टोर करें।
- रहस्यों को प्रबंधित करने के लिए अपने क्लाउड प्रदाता की सेवा का उपयोग करें।
- यदि स्रोत कोड के माध्यम से पासवर्ड का खुलासा किया गया है: इसे बदलें।
संवेदनशील जानकारी, जैसे कि पासवर्ड, को सीधे स्रोत कोड में संग्रहीत करने से सिस्टम अनधिकृत पहुंच और संभावित कारनामों को उजागर करता है।
ट्विटर