क्या यह वेब कॉन्फ़िगरेशन में एक अच्छा अभ्यास सेट कनेक्शन तार है?


14

हाल ही में मैंने अपने कुछ सहयोगियों के साथ अपने काम पर चर्चा की है क्योंकि उन्होंने कहा कि यह बेहतर है कि .DL में एक स्ट्रिंग कनेक्शन एन्क्रिप्ट किया गया है। और मैंने कहा कि वेब में परिभाषित स्ट्रिंग कनेक्शन का उपयोग क्यों न करें। एन्क्रिप्ट किया गया? यह वही है और यह बेहतर है क्योंकि इकाई रूपरेखा, उदाहरण के लिए एप्लिकेशन के वेब कॉन्फ़िगरेशन में कनेक्शन के नाम के लिए दिखता है, अब मैं एक सुरक्षा बिंदु से जानना चाहता हूं कि क्या बेहतर है या सबसे अच्छा अभ्यास क्या है ??


2
बेशक, आप केवल एक डोमेन उपयोगकर्ता के रूप में आवेदन चला सकते हैं और केवल उस उपयोगकर्ता को डेटाबेस तक पहुंचने की अनुमति दे सकते हैं। तब उन्हें आपके डेटाबेस में सेंध लगाने के लिए LDAP तक पहुँच की आवश्यकता होती है।
पीडीआर

@pdr: कनेक्शन स्ट्रिंग अभी भी कुछ जानकारी को प्रकट करेगी जिसे आप पसंद नहीं करेंगे यदि वेबसर्वर से समझौता किया गया था, जैसे डेटाबेस सर्वर का नाम और डेटाबेस का नाम।
कार्सन 63000 2

जवाबों:


18

इसमें कोई महत्वपूर्ण अंतर नहीं है, सिवाय इसके कि आपको वास्तव में एक द्विआधारी का निर्माण करना होगा यदि आप एक डीएलएल में डालते हैं, तो आप कॉन्फ़िगरेशन परिवर्तन करना चाहते हैं, जबकि एक व्यवस्थापक अच्छी तरह से समझे जाने वाले ऑफ-द-शेल्फ टूल के साथ कॉन्फ़िगरेशन को संशोधित कर सकता है। अगर यह विन्यास में है। कॉन्फ़िगरेशन स्ट्रिंग्स को एन्क्रिप्ट करने और MSDN पर अतिरिक्त मार्गदर्शन के लिए पहले से ही एक तंत्र है । Asp.Net के वर्तमान संस्करणों में वैकल्पिक तंत्र हो सकते हैं, इसलिए दृष्टिकोण करने से पहले कुछ अतिरिक्त शोध करें।

सिर्फ इसलिए कि कुछ DLL में बैठा है, इसे और अधिक सुरक्षित नहीं बनाता है। एक पाठ संपादक बाइनरी फ़ाइलों को भी खोल सकता है, रिफ्लेक्टर जैसे उपकरण एनएक्सएल डीएलएल को नेविगेट करने के लिए एक अच्छा इंटरफ़ेस प्रदान कर सकते हैं; DLL कोई "अतिरिक्त" एन्क्रिप्शन प्रदान नहीं करेगा।


टेस्ट बाइनरी है, बाइनरी नंबर है, अगर कोई 1 का पढ़ सकता है और 0 आपकी भौतिक और सॉफ्टवेयर सुरक्षा विफल हो गई है।
रामहुंड

12

इससे कोई फर्क नहीं पड़ता कि एन्क्रिप्टेड डेटा कहाँ संग्रहीत है, यह मायने रखता है कि यह कैसे एन्क्रिप्ट किया गया है।

एक web.config में एन्क्रिप्ट किए गए खंडों को आम तौर पर डेटा सुरक्षा एपीआई के साथ एन्क्रिप्ट किया जाता है , जो पूरी मशीन से समझौता किए बिना दरार करना बेहद मुश्किल है। आप एक आरएसए कुंजी कंटेनर का उपयोग भी कर सकते हैं, जो समान है (मशीन से उन लोगों को प्राप्त करना मुश्किल है)।

यदि आप डीएलएल में एन्क्रिप्टेड स्ट्रिंग को स्टोर करना चाहते हैं, तो यह ठीक है, मुझे लगता है, हालांकि यह एन्क्रिप्टेड web.config (कोई भी व्यक्ति DLL में रिफ्लेक्टर के साथ झांक सकता है ) की तुलना में स्वाभाविक रूप से सुरक्षित नहीं है , और स्पष्ट रूप से बदलना मुश्किल है (आप 'recompile करने की आवश्यकता है)। लेकिन फिर, जो बहुत अधिक महत्वपूर्ण है वह यह है कि एन्क्रिप्टेड स्ट्रिंग कैसे उत्पन्न हुई थी; संभवतः आप एक ही प्रदाता का उपयोग नहीं कर रहे हैं जैसा कि आप एन्क्रिप्टेड web.config के लिए करेंगे, तो आप क्या उपयोग कर रहे हैं?

एक एन्क्रिप्शन योजना केवल निजी कुंजी या साझा रहस्य के रूप में मजबूत है। यदि वह कुंजी आपके असेंबली में भी संग्रहीत है, तो आपके पास कोई एन्क्रिप्शन नहीं हो सकता है। यदि इसे किसी बाहरी डेटाबेस में संग्रहीत किया जाता है, तो यह सवाल उठाता है कि कैसे डेटाबेस का कनेक्शन स्ट्रिंग सुरक्षित है। यह वास्तव में केवल समग्र सुरक्षा को कमजोर कर सकता है।

दूसरी ओर, यदि आप एक सेवा प्रदाता थे और कनेक्शन स्ट्रिंग को एक उपयोगकर्ता पासवर्ड के साथ एन्क्रिप्ट किया गया था , तो वह स्थिर मशीन कुंजी का उपयोग करने की तुलना में अधिक सुरक्षित होगा । फिर से, यदि आप उपयोगकर्ता पासवर्ड को एन्क्रिप्ट करने के लिए उपयोग कर रहे हैं, तो यह बहुत कम संभावना नहीं है कि आप अपनी विधानसभा में एन्क्रिप्ट किए गए डेटा को हार्ड-कोडिंग करेंगे, क्योंकि इसे उपयोगकर्ता (डेवलपर नहीं) कार्रवाई के जवाब में उत्पन्न और संग्रहीत करना होगा।

वास्तव में मैं बहुत सी स्थितियों के बारे में नहीं सोच सकता, जहां डीएलएल में हार्ड-कोडिंग ए (एन्क्रिप्टेड) ​​कनेक्शन स्ट्रिंग संबंधित वेब.कॉन्फिग अनुभाग को एन्क्रिप्ट करने की तुलना में अधिक सुरक्षित है। कम से कम यह सिर्फ असुविधा जोड़ रहा है, कम से कम यह कुछ अनाड़ी-लिखित कस्टम सुरक्षा पर निर्भर है जो छिद्रों से भरा हुआ है। अपने आप को एक एहसान करो और वही करो जो Microsoft सुझाता है - यदि संवेदनशील डेटा है तो बस अपने web.config को एन्क्रिप्ट करें।


2

ASP.NET के लिए सबसे अच्छा अभ्यास web.config फ़ाइल या app.config फ़ाइल (अन्य परियोजना प्रकारों के लिए) में सभी कॉन्फ़िगरेशन / सेटिंग्स डाल दिया गया है।

एन्क्रिप्शन के बारे में और अपने कनेक्शन स्ट्रिंग्स पर इसका उपयोग करने का कारण एक बहुत ही विशेष मामला है। क्योंकि अधिकांश मामलों में 99% तक आपको अपने कनेक्शन स्ट्रिंग्स को एन्क्रिप्ट करने की आवश्यकता नहीं है। Microsoft के अपने एंटरप्राइज़ एप्लिकेशन के पास वेब.config / app.config फ़ाइल में उनके कनेक्शन स्ट्रिंग उजागर होते हैं। मुझे लगता है कि आप सुरक्षा को जटिल कर रहे हैं।

एक और बात, आपके कनेक्शन के स्ट्रिंग्स को हार्ड-कोड करना बुरा व्यवहार है। उदाहरण के लिए, DLL या .aspx / .ascx / .cshtml या कोड-पीछे में कोई कनेक्शन स्ट्रिंग (उर्फ कनेक्शनस्ट्रिंग) न डालें।


1
आपको कॉन्फिग फाइल में क्लियर टेक्स्ट में पासवर्ड कभी नहीं रखना चाहिए। सिर्फ इसलिए कि यह फ़ायरवॉल के पीछे एक उद्यम अनुप्रयोग है इसका मतलब यह सुरक्षित नहीं है और आप सुरक्षा के बारे में भूल सकते हैं।
रयान एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.