2009-03-18 12 views
9

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

उत्तर

3

यदि आप इसे स्टोर करने के इच्छुक नहीं हैं, तो आपको इसके लिए संकेत देना होगा। आप पासवर्ड एन्क्रिप्ट कर सकते हैं, लेकिन फिर आपके पास इसे डिक्रिप्ट करने की कुंजी होनी चाहिए और आप एक ही समस्या में फंस गए हैं।

+0

राइट - एक अच्छा विकल्प हो सकता है। एक और विकल्प है - एक अलग स्थान पर उपयोगकर्ता नाम/पासवर्ड संग्रहीत करना और मेरे जावा एप्लिकेशन को उन यूजर को बिना किसी प्रॉक्सी लाइब्रेरी के चलते चलाने वाले यू/पी संयोजन को प्राप्त करने की अनुमति देना। या जेएनडीआई? – Alex

5

मैं एक .NET देव हूं, लेकिन मैं ठीक उसी स्थिति में चला गया हूं।

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

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

0

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

+0

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

+0

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

2

सर्वर आधारित अनुप्रयोगों के लिए इस समस्या के सामान्य समाधानों में से एक है उपयोगकर्ता नाम और पासवर्ड को उस फ़ाइल में संग्रहीत करना जिसमें उपयोगकर्ता अनुमतियां इस तरह से सेट की गई हैं कि केवल एप्लिकेशन/सेवा के निष्पादन उपयोगकर्ता ही इसकी सामग्री पढ़ सकें।

उदाहरण के लिए, आप अपना आवेदन उपयोगकर्ता foo-service के रूप में चलाते हैं और इसे foo-service उपयोगकर्ता के सभी एक्सेस विशेषाधिकार प्राप्त होते हैं। उपयोगकर्ता नाम और पासवर्ड वाली फ़ाइल केवल उस उपयोगकर्ता द्वारा पठनीय है। आप फ़ाइल से मूल्य पढ़ते हैं और डेटाबेस से सामान्य के रूप में कनेक्ट होते हैं।

इस दृष्टिकोण के साथ संभावित समस्याओं:

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

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

0

डेटाबेस एक्सेस करने वाले सर्वर से अपने एप्लिकेशन को अलग करने के लिए वेब सेवाओं का उपयोग करें। अपने वेब एप्लिकेशन पर हस्ताक्षर करें और फिर वेब सेवा सर्वर को कॉल करने के लिए केवल एक उचित हस्ताक्षरित एप्लिकेशन की अनुमति दें।

0

आप सिस्टम गुणों का उपयोग कर फ़ाइल लोड करने का प्रयास कर सकते हैं। -Dapplication.configuration = application.properties।

जब संपत्ति फ़ाइल पास नहीं होती है तो आपको डिफ़ॉल्ट फ़ाइल को डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ उपयोग करना चाहिए।

जब फ़ाइल मौजूद है तो आप कॉन्फ़िगरेशन से प्रदान किए गए मानों के साथ डिफ़ॉल्ट को ओवरराइड करते हैं।

जावा -Dlog4j.configuration = फ़ाइल: /log4j.properties -Dapplication.configuration = फ़ाइल: /live-conf.conf जार app.jar "applicationarg1" "applicationarg1"

अधिक स्रोतों का अनुसरण करने के लिए: https://docs.oracle.com/javase/tutorial/essential/environment/properties.html

कैसे प्रणाली गुण ओवरराइड करने के लिए:

-Dproperty = मूल्य एक प्रणाली संपत्ति के मूल्य निर्धारित करें। यदि मान एक स्ट्रिंग है रिक्ति है, तो आप दोहरे उद्धरण में स्ट्रिंग संलग्न करना होगा:

http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html

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