2010-05-21 12 views
13

मान लीजिए मेरे पास मेरे पैकेज org.jake में एक क्लास है और इसमें डिफ़ॉल्ट पहुंच (कोई संशोधक नहीं) के साथ एक विधि है। फिर विधि केवल पैकेज के अंदर दिखाई दे रही है।पैकेज-प्राइवेट विधियों तक पहुंचने वाले वर्गों के बाहर

हालांकि, जब कोई मेरे ढांचे का जार प्राप्त करता है, तो उन्हें एक नई कक्षा लिखने से रोकने के लिए क्या है, अपने पैकेज को org.jake के रूप में घोषित करना, और मेरी अनुमानित अदृश्य विधि का उपयोग करना?

दूसरे शब्दों में, क्या मैं इसे रोकने के लिए कुछ भी कर सकता हूं?

+0

यह आपके शीर्षक को संपादित करने के लायक हो सकता है ताकि यह नहीं हो सके "संरक्षित" शब्द का उपयोग न करें कि इसका एक बहुत ही विशिष्ट अर्थ है। –

उत्तर

16

आप अपने जार फ़ाइल में seal the package कर सकते हैं। हालांकि यह बुलेट प्रूफ नहीं है।

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

यदि कोई आपके पैकेज में कक्षाओं को अपने encapsulation को रोकने के लिए तैयार करने के इच्छुक है, तो वे स्पष्ट रूप से आपके सर्वोत्तम इरादों को अनदेखा कर रहे हैं - मैं कहता हूं कि चलो इसके साथ आगे बढ़ें, लेकिन उस परिदृश्य के लिए समर्थन प्रदान न करें।

6

ऐसा करने के लिए आप कुछ भी नहीं कर सकते हैं। यहां तक ​​कि निजी सदस्यों को प्रतिबिंब के माध्यम से भी पहुंचा जा सकता है। आपको जावा में एक्सेस संशोधक को केवल सुझाव देने के लिए विचार करना चाहिए।

0

मैं कहूंगा कि बस उन्हें कोड चलाने की अनुमति न दें जहां यह आपके कॉल कर सकता है, यानी एक ही जेवीएम में। आप इसके बजाय केवल एक (वेब) सेवा की पेशकश करने पर विचार कर सकते हैं जिसे वे बाहरी रूप से कॉल कर सकते हैं। हालांकि मैं इसे लागू करने के सर्वोत्तम तरीकों पर बहुत अद्यतित नहीं हूं।

1

सबसे पहले, यह "DRM" परिदृश्य है: अंत में, किसी को पर्याप्त एक फैशनेबल संशोधित क्रम या अन्य ऐसी बातों की आपूर्ति करके किसी भी सुरक्षा आप स्थान पर रखा हार कर सकते हैं निर्धारित किया। रिवर्स परिदृश्य - जहां रनटाइम भरोसा किया जाता है लेकिन कुछ पैकेज नहीं हैं - उपयुक्त ClassLoader प्रतिबंधों के उपयोग के माध्यम से जावा द्वारा ठीक तरह से निपटाया जाता है, लेकिन यह केवल तभी काम कर सकता है जहां एक विश्वसनीय फैशन में प्रतिबंध लागू कर सकें; यही कारण है कि आपका परिदृश्य मूल रूप से बर्बाद हो गया है।

हालांकि, अगर हम मान लेते हैं कि क्रम में ही trustable तो आप की कोशिश कर सकते है, अपने सुपर गुप्त विधि में, वर्तमान में क्रियान्वित ढेर के स्टैक ट्रेस हो रही है और परीक्षण (के लिए कैसे stackoverflow.com/questions/1069066/… देखें) देखने के लिए वर्तमान विधि का कॉलर वह है जिसे आप एक्सेस प्राप्त करने पर भरोसा करते हैं। एक सुरक्षा प्रबंधक और भी उपयुक्त होगा, लेकिन आप पर्यावरण पर भरोसा नहीं कर सकते हैं कि आप उन लोगों में से एक स्थापित करें जिन्हें आप पसंद करते हैं (यह हमलावर के नियंत्रण में अधिक स्पष्ट रूप से है)। ध्यान दें कि मैंने इस अनुच्छेद में विकल्पों का प्रयास नहीं किया है!

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

+0

आप 'java.security.Permission' ढांचे का उपयोग नहीं कर सकते क्योंकि उपयोगकर्ता स्वयं को पूर्ण शक्ति प्रदान कर सकता है। –

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