2010-11-11 14 views
28

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

धन्यवाद

+1

किस प्रकार का ऐप? डेस्कटॉप एप्लिकेशन या एएसपीनेट एप्लिकेशन? एएसपीनेट के लिए आपके पास कुछ वैध विकल्प हैं क्योंकि उम्मीद है कि उपयोगकर्ता/हमलावर के पास सर्वर तक पहुंच नहीं होगी। –

+1

इसे एक टेक्स्ट फ़ाइल में वास्तव में लंबे और अस्पष्ट निर्देशिका पथ में संग्रहीत करें ;-) – badbod99

उत्तर

25

अपने स्रोत कोड में पासवर्ड न संग्रहीत करें, इसे अपने भीतर सुरक्षित अनुभाग में स्टोर करें App.Config (या Web.Config)।

देखें को कूटबद्ध करने कॉन्फ़िगरेशन फ़ाइल धारा इस Microsoft Doc

इस का उपयोग कर एन्क्रिप्शन कुंजी को एन्क्रिप्ट करके काम करता है में संरक्षित विन्यास अनुभाग का उपयोग कर बनाया Windows के सामान, मैक पते और विभिन्न अन्य गैर-दस्तावेजी बातें करने के लिए बंद कर दिया।

तब भी, जब आप एक से अधिक सर्वर का उपयोग कर रहे हैं काम करेंगे:

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

इस का उपयोग करना, यदि कोई आपका पासवर्ड प्राप्त करना चाहता था, वे पहले अपने सर्वर पर Windows सुरक्षा को तोड़ने के लिए होता है (असंभव नहीं है, लेकिन अब तक पासवर्ड के लिए अपने आईएल में देख तुलना में कठिन)।

+0

तो यह कौन सा है, यह उत्तर या [स्लैक्स] [https://stackoverflow.com/a/4155200/)? – Sinjai

+0

क्या पासवर्ड को सुरक्षित रखने का कोई तरीका है भले ही किसी के पास आपके सर्वर पर नियंत्रण हो? –

12

परेशान मत हो।
आप जो कुछ भी कर सकते हैं, आपका हमलावर छोटे से पूर्ववत कर सकता है।

यदि इसे केवल एक मशीन पर चलाने की आवश्यकता है, तो आप ProtectedData class का उपयोग कर सकते हैं, जो उस मशीन और/या उपयोगकर्ता पर किसी के खिलाफ सुरक्षित रूप से इसकी रक्षा नहीं करेगा।

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

+0

क्या कोई कारण है कि MD5 इस मामले में उपयुक्त नहीं है? – theburningmonk

+3

@the: MD5 एक सुरक्षित हैश नहीं है। साथ ही, यह आउटपुट सुरक्षित एन्क्रिप्शन कुंजी के लिए पर्याप्त नहीं है। (पढ़ें, एईएस) – SLaks

2

स्रोत कोड में पासवर्ड स्टोर करने के लिए कोई "सर्वश्रेष्ठ तरीका" नहीं है क्योंकि इसे कई तरीकों से पुनर्प्राप्त किया जा सकता है।

आप पासवर्ड स्ट्रिंग को खराब कर सकते हैं या इसे सरल देखने के माध्यम से प्रकट करने के लिए एन्क्रिप्ट भी कर सकते हैं लेकिन इसे गंभीर सुरक्षा के रूप में नहीं माना जा सकता है।

2

आप इसे web.config फ़ाइल में एन्क्रिप्टेड मान के रूप में रख सकते हैं। यह बहुत कठिन नहीं लग रहा है: के स्कॉट एलन ट्यूटोरियल http://odetocode.com/blogs/scott/archive/2006/01/08/encrypting-custom-configuration-sections.aspx

मुझे लगता है कि अन्य जानकारी के लिंक के साथ स्कॉट gu ब्लॉग पोस्ट है। http://weblogs.asp.net/scottgu/archive/2006/01/09/434893.aspx

+2

अपनी मशीन को पैच करना न भूलें, क्योंकि web.config फ़ाइल पैडिंग ओरेकल अटैक के माध्यम से देखने योग्य है: http://threatpost.com/en_us/blogs/padding-oracle-crypto-attack-affects- नेटवर्क स्नीफिंग कोण को नोट करने के लिए लाखों-एस्पनेट-ऐप्स -0 9 1310 – djTeller

2

एन्क्रिप्ट यह, लेकिन जैसा कि SLaks से गर्भित, अपने हमलावर अपने कोड इंजीनियर और एन्क्रिप्शन विधि और चाबी बाहर काम उल्टा कर सकते हैं। आप जो भी कर रहे हैं वह एक परत जोड़ रहा है जो स्क्रिप्ट किड्स और हमलावर के एक निश्चित स्तर को बाहर रखता है। कोई भी जो वास्तव में इसे काम करना चाहता है, कर सकता है। वे आपके कार्यक्रम को भी चला सकते हैं और देख सकते हैं कि कौन सा पासवर्ड भेजा गया है।

+0

+1। – Paddy

+1

नेटवर्क स्नीफिंग वास्तव में एसएफटीपी के साथ काम नहीं करेगा। – Brian

+1

सच है, लेकिन मैं यह भी सोच रहा था कि एक डीबगर के साथ प्रोग्राम के माध्यम से कदम उठाने से पासवर्ड में अनएन्क्रिप्टेड पासवर्ड दिखाई देगा, अनएन्क्रिप्शन के बीच और एसएफटीपी कनेक्शन खोले जाने से पहले। – winwaed

1

स्रोत कोड में अपना पासवर्ड सहेज न करें।

इस पढ़ें: http://en.wikipedia.org/wiki/Security_through_obscurity

कोई अच्छा तरीका नहीं है।

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

एक अनुभवी रिवर्स इंजीनियर इसे क्रैक करने का प्रबंधन करेगा।

1

कोई ऐसा व्यक्ति नहीं है जो वास्तव में आपका पासवर्ड चाहता है। हालांकि, अगर यह एक सार्वजनिक ऐप नहीं है (इंट्रानेट? इन-हाउस ऐप या कुछ) तो आप इसे सममित एन्क्रिप्शन एल्गोरिदम का उपयोग करके एन्क्रिप्ट कर सकते हैं, या बेस 64 एन्कोडिंग जैसे कुछ ऐसा कर सकते हैं। आप इसे कम स्पष्ट करने के लिए अपने कोड पर एक obfuscator भी चला सकते हैं कि वहां कहीं भी एक पासवर्ड है।

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

1

आप अपने असेंबली के रिवर्स इंजीनियरिंग को अवरुद्ध करने के लिए SLP Code Protector जैसे कुछ का उपयोग कर सकते हैं। फिर भी, मैं हर किसी के साथ सहमत हूं, यह सबसे अच्छा विचार नहीं है।

5

मैं वास्तव में App.Config या Web.Config में "संरक्षित अनुभाग" सुविधा का उपयोग करने पर विचार करता हूं ताकि आपके कोड में पासवर्ड संग्रहीत करने से कम सुरक्षित हो। सर्वर का उपयोग के साथ

किसी को भी बस के रूप में जल्दी config के उस अनुभाग को डिक्रिप्ट कर सकते हैं के रूप में आप यह लेख हर किसी में वर्णित डिक्रिप्ट आदेश चलाकर एन्क्रिप्टेड के हवाले रहता है:

aspnet_regiis -pd "connectionStrings" -app "/SampleApplication" 

https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx#Anchor_1

तो इस सुविधा एएसपी.Net केवल उस मामले में सुरक्षा जोड़ता है कि किसी हैकर को किसी भी तरह से आपके web.config तक पहुंच थी, लेकिन आपका पूरा सर्वर नहीं (2010 में @djteller ऑरैक पैडिंग आक्रमण टिप्पणी में उल्लिखित) के रूप में हुआ। लेकिन अगर उनके पास सर्वर का उपयोग है, तो आप एक cmd कॉल में उजागर हो गए हैं। उन्हें ildasm.exe भी स्थापित करने की आवश्यकता नहीं है।

हालांकि, आपके कोड में वास्तविक पासवर्ड संग्रहीत करना एक रखरखाव दुःस्वप्न है। तो मैंने जो कुछ देखा है, वह आपके web.config में एन्क्रिप्टेड पासवर्ड संग्रहीत कर रहा है और आपके कोड में एन्क्रिप्शन कुंजी संग्रहीत कर रहा है। यह अभी भी बनाए रखने योग्य होने पर प्रासंगिक ब्राउज़िंग से पासवर्ड छिपाने का लक्ष्य पूरा करता है।

इस मामले में एक हैकर को कम से कम अपना कोड डीकंपाइल करना होगा, अपनी कुंजी ढूंढें, और फिर पता लगाएं कि आप किस एन्क्रिप्शन एल्गोरिदम का उपयोग कर रहे हैं। असंभव नहीं है, लेकिन "aspnet_regiis -pd ..." चलाने से निश्चित रूप से कठिन है।

इस बीच मैं इस छः वर्षीय प्रश्न के बेहतर उत्तरों की भी तलाश कर रहा हूं ...

संबंधित मुद्दे