2008-12-23 6 views
5

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

और जब मुझे पूरा यकीन है कि यह सच है :-) मुझे यकीन नहीं है कि यह वास्तव में कितना आसान है। मैंने विषय को गुगल करने की कोशिश की लेकिन मुझे कोई प्रासंगिक परिणाम नहीं मिला (Google- fu इस में कमज़ोर है), इसलिए मैं आपको SO पर लोगों की कोशिश करता हूं।

क्या आप किसी ऐप डोमिनियन में पूर्ण स्ट्रिंग की सूची तक पहुंचने के किसी भी "आसान" तरीके से जानते हैं? क्या मुझे मेमोरी डंप और उस सामान का उपयोग करना चाहिए या AppDomain.GetInteredStringsList() जैसी कोई विधि है?

और उससे संबंधित: यह वास्तव में पूर्णांक से किसी भी उपयोगी डेटा को प्राप्त करना कितना आसान है। तारों में संवेदनशील डेटा स्टोर करने के लिए यह वास्तव में एक सुरक्षा छेद है?

उत्तर

6

यह विशेष रूप से आसान नहीं है - लेकिन यह करने योग्य है।

असल में, यदि आपके पास कुछ भी है जो मेमोरी डंप ले सकता है, तो आप स्मृति की बिट्स पा सकते हैं जो कि स्ट्रिंग ऑब्जेक्ट्स की तरह दिखते हैं। (विशेष रूप से, वे सभी में शुरुआत में "जानकारी टाइप करने के लिए सूचक" होगा, इसलिए यदि आपके पास नमूना स्ट्रिंग है, तो आप दूर हैं।)

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

+0

संदर्भों में जानकारी टाइप करने के लिए सूचक नहीं है, ऑब्जेक्ट्स में उनके ऑब्जेक्ट हेडर में वह जानकारी है। –

+0

क्षमा करें, मेरा मतलब यही था - स्मृति की बिट्स जो * स्ट्रिंग्स हैं। मैं जवाब संपादित कर दूंगा। –

+0

... और तार जो आप स्विच का उपयोग करते हैं, भले ही वे किसी एक मामले से मेल नहीं खाते हैं। मुझे लगता है कि यह "स्पष्ट रूप से इंटर्न" के अंतर्गत आता है, हालांकि यह स्पष्ट रूप से ऐसा करने के रूप में स्पष्ट नहीं है;) –

1

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

+0

क्या आपके पास कोई उदाहरण है कि आप यह कैसे करेंगे? मैं नहीं देखता कि आप पासवर्ड इनपुट बॉक्स या एएसपीनेट लॉगिन फॉर्म –

3

क्या यह वाकई स्ट्रिंग में संवेदनशील डेटा स्टोर करने के लिए एक सुरक्षा छेद है?

हाँ, निश्चित रूप से हाँ!

संवेदनशील सुरक्षा डेटा को SecureString कक्षा का उपयोग करके संग्रहीत किया जाना चाहिए।

संपादित करें:

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

+0

का उपयोग करके इसे कैसे करेंगे सुरक्षित सुरक्षा को सुरक्षित नहीं माना जाता है।उदाहरण के लिए, कुछ लाइव डिबगिंग टूल (हॉकी, सोसासिस्ट, आदि) उन्हें पढ़ सकते हैं। –

+0

@ मार्क कुछ भी सुरक्षित नहीं है, अगर आपको पता है कि इसे कैसे पढ़ा जाए, तो आप एन्क्रिप्शन स्कींग को पढ़ सकते हैं यदि आप एन्क्रिप्शन योजना जानते हैं। –

+0

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

1

ऐसा करना असंभव नहीं है ... हालांकि प्रबंधित कोड के माध्यम से जरूरी नहीं है। किसी भी चीज जिस पर एक प्रक्रिया डंप (विंडब/एसओएस/आदि) तक पहुंच है, तारों की तलाश में कोई कठिनाई नहीं होगी।