मैं जावा डेवलपर नहीं हूं, लेकिन मेरे क्लाइंट ने अपनी साइट पर कुछ जेएआर फ़ाइलों को अपडेट करने के लिए एक को किराए पर लिया है। ऐसा करने से पहले, हमने मौजूदा कोड का ऑडिट किया और कई सुरक्षा भेद्यताएं पाईं। फ़ाइलों को और अधिक सुरक्षित बनाने के लिए हमने जिन समाधानों को नियोजित किया है, उनमें से एक डेटाबेस को केवल पढ़ने के लिए उपयोग के साथ एक नया डेटाबेस उपयोगकर्ता बनाना है, और केवल उन तालिकाओं के लिए जिन्हें JAR फ़ाइलों को संचालित करने के लिए आवश्यक है। तब मुझे पता चला कि वे जेएआर फाइलों के साथ सादा पाठ फ़ाइलों में इन प्रमाण-पत्रों को संग्रहित कर रहे हैं, केवल जनता से दूर एक शिक्षित अनुमान है। और अंततः वे बहुत कम डेटाबेस डेटाबेस विशेषाधिकार मांग रहे हैं, लेकिन मुझे नहीं लगता कि वह समझती है कि उन्हें वास्तव में एक उचित लिखित जेएआर फ़ाइल के लिए उनकी आवश्यकता नहीं है।सुरक्षित डेटाबेस कनेक्शन आमतौर पर JAR फ़ाइलों में लागू कैसे होते हैं?
वैसे भी, मुझे पूरा यकीन है कि यह डेवलपर सुरक्षा भेद्यता को नहीं जानता अगर वह उसे पीछे की तरफ रखता है। और मुझे जावा/जेएआर फाइलों के बारे में पर्याप्त जानकारी नहीं है कि उसे पर क्या करना चाहिए, केवल उसे बताएं कि वह नहीं करनी चाहिए।
तो रिमोट MySQL डेटाबेस से कनेक्ट एक वितरित JAR फ़ाइल लिखते समय सामान्य सुरक्षा विचार क्या हैं? क्या कनेक्शन विवरण (उपयोगकर्ता नाम और/या पासवर्ड) एन्क्रिप्ट करने का कोई मानक तरीका है? आईआईआरसी, नहीं हैं .jar फाइलें सिर्फ ज़िप अभिलेखागार की महिमा करती हैं, और कोई भी फ़ाइल को अनपैक करने और स्रोत कोड में कनेक्शन विवरण देखने के लिए नहीं कर सकता? जार फ़ाइल सामग्री एन्क्रिप्ट करने का कोई तरीका है?
अद्यतन: मुझे डेवलपर से निम्नलिखित स्पष्टीकरण प्राप्त हुआ। क्या यह सही लगता है?
जार फ़ाइल में सभी कक्षाएं एन्क्रिप्टेड हैं। मैंने हमेशा जार फ़ाइल में संग्रहीत करने से पहले सभी क्लास फ़ाइलों को एन्क्रिप्ट किया है। यदि आप कोई भी [redacted] जार खोलते हैं, तो आपको केवल एन्क्रिप्टेड कोड दिखाई देगा। इसलिए क्लास को डिकंपलिंग करके उपयोगकर्ता को स्रोत कोड देखने में सक्षम होने का कोई मौका नहीं है। कक्षाएं डीबी से कनेक्ट करने के लिए जेडीबीसी का उपयोग करती हैं, खोज ईंगिन को एसबीएल चलाने के लिए डीबी से कनेक्ट करने की आवश्यकता होती है। ये sqls जार फ़ाइल में teh एन्क्रिप्टेड clasees में हैं।
जब मैंने आपको डीबी पासवर्ड एन्क्रिप्ट करने के बारे में पूछा, तो मेरा मतलब था कि आप नीचे क्या कहते हैं। हम जावा में एक एन्क्रिप्शन/डिस्क्रिप्शन कोड लिखेंगे और इसका इस्तेमाल करेंगे। इस स्रोत कोड से संकलित कक्षा फिर से रीटिन क्लास एन्क्रिप्शन प्रक्रिया के हिस्से के रूप में एन्क्रिप्टेड हो जाएगी। हम सभी कक्षाओं को एन्क्रिप्ट करने के लिए रेट्रोगुआर्ड नामक जावा ओबफ्यूशन टूल का उपयोग करते हैं। हम यह सुनिश्चित करने के लिए एचटीएमएल पेज में एक कुंजी भी एम्बेड करते हैं कि एप्लिकेशन केवल तभी काम करेगा जब इसे फॉर्म [redacted] वेबसाइट डाउनलोड किया गया हो। यदि उपयोगकर्ता जार को अपनी स्थानीय मशीन पर कॉपी करता है और इसे चलाने की कोशिश करता है, तो यह असफल हो जाएगा।
आपका डीबी सिस्टम किस लॉगिन विकल्प का समर्थन करता है? क्या यह उपयोगकर्ता/पास की बजाय हस्ताक्षरित कुंजी (ला एसएसएच) का उपयोग करने का समर्थन करता है? क्या पर्यावरण में अन्य प्रमाणीकरण तंत्र (एलडीएपी, एडी, पीएएम) हैं जिनका उपयोग डीबी ऑथ के बजाय किया जा सकता है? – Freiheit
यदि आप विवरण एन्क्रिप्ट करते हैं, तो आपको क्लाइंट पर उन्हें डिक्रिप्ट करने की आवश्यकता होगी। खेल खत्म। तो आप शायद उन्हें तार पर स्पष्ट रूप से भेजने जा रहे हैं - जिसका अर्थ है कि एक विरोधी को जावा स्थापित करने से परेशान करने की आवश्यकता नहीं होती है। –
धन्यवाद टॉम, मैंने नहीं सोचा था कि अंतिम परिणाम डिजाइन में कार्यान्वित किसी भी सुरक्षा को ट्रम्प करता है। इस विशेष mysql उपयोगकर्ता के पास केवल पढ़ने के लिए उपयोग है, इसलिए मैं कहने के लिए लगभग प्रलोभन कर रहा हूं "ठीक है, जो भी हो, कम से कम वे डेटा पैरामीटर को रोक नहीं सकते हैं, अगर वे कनेक्शन पैरामीटर को रोकते हैं" लेकिन मुझे इसके बारे में बहुत अच्छा नहीं लगता यह लंबे समय तक है। –