2011-03-30 17 views
5

मैं ऐसे सॉफ़्टवेयर लिखता हूं जो ईमेल पते, पासवर्ड और क्रेडिट कार्ड नंबर जैसे संवेदनशील जानकारी के विभिन्न टुकड़ों से संबंधित हैं।जावा हीप डंप में संवेदनशील डेटा

जब हमें स्मृति समस्या हो रही है, तो एप्लिकेशन को एक ढेर डंप लिखना अच्छा लगेगा। समस्या यह है कि यदि ढेर क्षेत्र में काम करने के लिए होता है तो ढेर डंप में सादे पाठ में संवेदनशील जानकारी हो सकती है ... हम वास्तव में डिस्क पर लिखे गए नहीं हैं जब हम इस तरह के महान दर्द को हर जगह एन्क्रिप्ट करने के लिए लेते हैं।

क्या इस तरह से निपटने का अर्थ है जैसे कि जेवीएम एन्क्रिप्टेड डंप लिखने के लिए?

+0

वाह, आईडी यह देखने में दिलचस्पी लेता है कि कोई समाधान है या नहीं - यह महंगा और लंगड़ा है, लेकिन आपकी वस्तुओं में सबकुछ एन्क्रिप्ट करें – somid3

+1

कोई भी/रूट पहुंच एप्लिकेशन को डंप और/या संशोधित कर सकती है। तो, मुझे कुछ भी एन्क्रिप्ट करने का कोई कारण नहीं दिख रहा है। आप किसी भी जावा प्रक्रिया के ढेर डंप डब्ल्यू/जेएमएपी प्राप्त कर सकते हैं। – bestsss

उत्तर

1

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

+4

लेकिन इसे संदर्भित करने से पहले स्मृति क्षेत्र को नूक करना सुनिश्चित करें! (इस प्रकार, 'स्ट्रिंग' ऑब्जेक्ट्स में पासवर्ड कभी भी स्टोर न करें, लेकिन इसके बजाय 'char []' का उपयोग करें। –

+0

संबंधित नोट पर, मुझे अतीत में चीजों को करने की ज़रूरत है जैसे कि उपयोगकर्ता का पासवर्ड स्वीकार करें, और उसके बाद इसे पास करें डब्ल्यूएस कॉल, लेकिन जेएक्सबी के पास एक स्ट्रिंग वैल्यू पास करने के लिए बाइट सरणी का उपयोग करने का कोई तरीका नहीं है। क्या किसी को इसके चारों ओर एक रास्ता पता है? –

+1

@ क्रिस, जावा में "nuking" स्मृति काम नहीं करता है। कचरा कलेक्टर किसी भी समय सामग्री को कॉपी करने के लिए स्वतंत्र होता है, इसलिए आपको w/a non-nuked ऑब्जेक्ट छोड़ दिया जाएगा। केवल आप ही कर सकते हैं DirectCharacterBuffers, char [] नहीं, बस एक बड़ा बफर का उपयोग करें और इसे स्लाइस करें क्योंकि प्रत्यक्ष बफर कम से कम एक पृष्ठ मेमोरी लेते हैं। और सामान को और खराब करने के लिए, आपको सॉकेट बफर सहित सभी निशान साफ़ करना होगा। कुल मिलाकर यह एक बेकार प्रयास है। – bestsss

3

मैं वीएम के बाहर इसे संभालने पर विचार कर रहा हूं। एक निष्क्रिय दृष्टिकोण हो सकता है कि जेवीएम एन्क्रिप्टेड लूपबैक डिवाइस पर डंप लिखें। बेशक यह पूरी तरह से सुरक्षित नहीं है क्योंकि रूट पहुंच वाले किसी भी व्यक्ति को माउंट प्वाइंट पर जा सकता है, लेकिन यह वह समाधान है जिसकी मैं उम्मीद कर रहा हूं। मैं देख सकता हूं कि क्या मैं एक फीफो स्थापित कर सकता हूं कि जेवीएम लिखने के लिए समाप्त होता है। मुझे लगता है कि वीएम का उपयोग करने वाले फ़ाइल नाम के बारे में पता चल जाएगा, इसलिए यह काम कर सकता है कि वीएम किस तरह से सामना करेगा (बाद में: यह काम नहीं करता है। JVM "फाइल मौजूद है" के साथ शिकायत करता है)

चार सरणी का उपयोग केवल मिटिगेट्स समस्या है, लेकिन यह अभी भी संभव है कि सरणी में डंप समय पर कुछ सादा पाठ होगा।

+0

+1 मैं पंजीकरण करता हूं, आपको एक खाते में प्रतिनिधि मिल जाएगा। – Daniel

+1

के लिए – Daniel

+0

भले ही आप ऐसा करते हैं, फिर भी डेटा कुछ समय पर एक प्रबंधित ढेर ऑब्जेक्ट के रूप में नहीं रहता है। मुझे यकीन नहीं है कि कम रिटर्न का बिंदु जोखिम में कमी है। – Jeremy

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