.NET DLL में कनेक्शन स्ट्रिंग को स्टोर करने का सबसे अच्छा तरीका क्या है?

वर्तमान में जिस टीम में मेरी टीम विकसित हो रही है, वह एक डीएलएल है जिसका उपयोग सभी डेटाबेस एक्सेस करने के लिए किया जाता है। एप्लिकेशन विश्वसनीय कनेक्शन का उपयोग नहीं कर सकता क्योंकि डेटाबेस फ़ायरवॉल के पीछे है और डोमेन सर्वर नहीं है। तो ऐसा प्रतीत होता है कि कनेक्शन स्ट्रिंग को डीबी उपयोगकर्ता नाम और पासवर्ड होना चाहिए। डीएलएल में वर्तमान में डाटाबेस कनेक्शन स्ट्रिंग हार्ड कोडेड है, लेकिन जब हम लॉन्च करते हैं तो मैं ऐसा नहीं करना चाहता क्योंकि असेंबली को अलग किया जा सकता है और उपयोगकर्ता नाम और पासवर्ड खुले में ठीक होगा।

आवश्यकताओं में से एक यह है कि प्रत्येक कुछ महीनों में पासवर्ड को बदलने की जरूरत है, इसलिए हमें इसे अपने आंतरिक उपयोगकर्ता आधार पर रोल करने की आवश्यकता होगी।

क्या एन्क्रिप्टेड पासवर्ड को इस तरह से स्टोर करने का कोई तरीका है कि हम आसानी से असेंबली में संग्रहीत किए बिना पूरे उपयोगकर्ता आधार पर वितरित कर सकते हैं?

अद्यतन: उत्तर देने वाले सभी के लिए धन्यवाद। मैं कुछ प्रश्नों का उत्तर देने का प्रयास करूंगा ... डेटा डीएलएल का उपयोग एएसपी.नेट वेबफॉर्म और वीबी.नेट विनफॉर्म दोनों द्वारा किया जाता है। मैं समझता हूं कि अनुप्रयोगों की अपनी कॉन्फ़िगरेशन फ़ाइलें हो सकती हैं, लेकिन मैंने DLLs के लिए कॉन्फ़िगरेशन फ़ाइलों पर कुछ भी नहीं देखा है। दुर्भाग्य से, मैं काम पर जॉन गैलोवे पोस्ट नहीं कर सकता, इसलिए अगर मैं काम करूंगा तो मैं फैसला नहीं कर सकता। विकास दृष्टिकोण से, हम वेब सेवाओं में इनहाउस का उपयोग नहीं करना चाहते हैं, लेकिन अगले साल कुछ समय में उन्हें तृतीय पक्षों को प्रदान कर सकते हैं। मुझे नहीं लगता कि प्रतिरूपण काम करेगा क्योंकि हम फ़ायरवॉल के माध्यम से उपयोगकर्ता को प्रमाणीकृत नहीं कर सकते हैं। चूंकि उपयोगकर्ता (या पूर्व उपयोगकर्ता) एक हमलावर हो सकता है, हम इसे सभी से रखते हैं!

0
ro fr bn

7 उत्तर

.NET इस तरह कॉन्फ़िगरेशन मानों पर एन्क्रिप्शन का समर्थन करता है। आप इसे एक कॉन्फ़िगरेशन फ़ाइल में छोड़ सकते हैं, लेकिन एन्क्रिप्टेड।

0
जोड़ा

मुझे यकीन नहीं है, लेकिन मुझे विश्वास है कि आप इसे एक कॉन्फ़िगरेशन फ़ाइल में डाल सकते हैं और कॉन्फ़िगरेशन फ़ाइल एन्क्रिप्ट कर सकते हैं।

Update: See Jon Galloway's post here.

0
जोड़ा
@ जेसनस्पर्सके - मैंने लिंक अपडेट किया है। मैं जल्द ही सारांशित करूंगा।
जोड़ा लेखक Adam V, स्रोत
अपडेट अब और कुछ भी इंगित नहीं करता है, अगर आप उस सूचना को पा सकते हैं जिसे आपने संदर्भित किया था और इसे इस जवाब में डाल दिया तो यह हमेशा के लिए जीवित रहेगा (या जैसे ही स्टैक ओवरफ्लो सूर्य द्वारा अवशोषित हो जाता है)
जोड़ा लेखक Jason Sperske, स्रोत

मुझे यह कहने से नफरत है लेकिन जैसे ही आप क्लाइंट मशीन पर कुछ डालते हैं, उस डेटा के लिए सुरक्षा विंडो से बाहर जाती है।

यदि आपका प्रोग्राम उस स्ट्रिंग को डिक्रिप्ट करने जा रहा है, तो आपको यह मानना ​​होगा कि एक हमलावर ऐसा ही कर सकता है। अपने कार्यक्रम में एक डीबगर संलग्न करना एक तरीका होगा।

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

मुझे एक प्रश्न पूछने दो। आप कनेक्शन स्ट्रिंग को किससे छुपा रहे हैं? उपयोगकर्ता या हमलावर? और यदि उपयोगकर्ता, क्यों?

0
जोड़ा

कुछ और विचार भी हैं। आप हमेशा प्रतिरूपण का उपयोग कर सकते हैं। इसके अलावा, आप एंटरप्राइज़ लाइब्रेरी (सामान्य पुस्तकालय) का उपयोग कर सकते हैं।


  

0
जोड़ा

यदि ऐप एक एएसपी.NET ऐप है तो बस अपने web.config के कनेक्शन स्ट्रिंग अनुभाग को एन्क्रिप्ट करें।

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

बस कुछ विचार।

Updated: @lassevk

"सर्वर पर कनेक्शन स्ट्रिंग को संग्रहीत करना, और वेब कनेक्शन के माध्यम से इसे प्राप्त करना अच्छा लगता है, जब तक आपको एहसास न हो कि आपको उस वेब कनेक्शन पर भी सुरक्षा की आवश्यकता है, अन्यथा कोई हमलावर आपके प्रोग्राम का प्रतिरूपण कर सकता है और उससे बात कर सकता है वेब कनेक्शन। "

वेब सेवा पर सुरक्षा निहित थी। तैनाती के प्रकार के आधार पर कई विकल्प हैं ... उदाहरण के लिए क्लाइंट साइड प्रमाणपत्र।

0
जोड़ा

आप कॉन्फ़िगर करने योग्य स्थान पर होने वाली सभी सेटअप जानकारी के साथ डीएलएल वितरित करने में सक्षम होना चाहते हैं, लेकिन तथ्य यह है कि जब तक आप कुछ कस्टम नहीं करते हैं, तब तक आप एक डीएलएल के लिए आसान-डेन्डी .NET कॉन्फ़िगरेशन फ़ाइलों में से एक नहीं रख सकते हैं।

हो सकता है कि आपको पुनर्विचार करना होगा कि आपके डीएलएल की क्या ज़िम्मेदारी होनी चाहिए। क्या यह संभव होगा, या यह समझने के लिए समझें कि कनेक्शन स्ट्रिंग को आपकी लाइब्रेरी के उपयोगकर्ता द्वारा पास किया जाना चाहिए? क्या यह वास्तव में समझ में आता है कि आपका डीएलएल एक कॉन्फ़िगरेशन फ़ाइल पढ़ता है?

0
जोड़ा

बस मान लें कि बुरे लोग आपकी कॉन्फ़िगरेशन फ़ाइल से प्रमाण-पत्र प्राप्त करेंगे। इसका मतलब है कि वे आपके डेटाबेस में लॉगिन करने में सक्षम होंगे और जो कुछ भी उपयोगकर्ता सक्षम है वह करें। तो बस सुनिश्चित करें कि उपयोगकर्ता सीधे टेबल तक पहुंचने जैसी कुछ भी बुरा नहीं कर सकता है। उस उपयोगकर्ता को केवल कुछ संग्रहीत प्रक्रियाओं को निष्पादित करने में सक्षम बनाएं और आप बेहतर आकार में होंगे। यह एक जगह है जो चमकती है।

0
जोड़ा
मैं हमेशा उन वेब ऐप्स के लिए SQL लॉगिन को सीमित करने का प्रयास करता हूं जिन पर मैंने जितना संभव हो उतना तरीकों से काम किया है।
जोड़ा लेखक Matt Blaine, स्रोत