2009-04-08 23 views
5

मैं एक ऐसी प्रणाली विकसित कर रहा हूं जो डेवलपर्स को कस्टम ग्रूवी स्क्रिप्ट और फ्रीमार्कर टेम्पलेट्स अपलोड करने की अनुमति दे।सैंडबॉक्सिंग जावा/ग्रोवी/फ्रीमार्कर कोड - विशिष्ट विधियों के निष्पादन को रोकना

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

मेरी योजना ग्रोवी और फ्रीमार्कर रनटाइम्स को एनोटेशन पढ़ने के लिए संशोधित करना था जो या तो कुछ तरीकों को श्वेतसूची या ब्लैकलिस्ट करेगा, हालांकि इससे मुझे उनके कोड का एक फोर्क संस्करण बनाए रखने के लिए मजबूर किया जाएगा, जो वांछनीय नहीं है।

मुझे अनिवार्य रूप से करने में सक्षम होना आवश्यक है जब ग्रोवी या फ्रीमार्कर से कॉल किए जाने पर विशिष्ट तरीकों के निष्पादन को रोकें। मैंने एक हैक माना है जो कॉल स्टैक को देखेगा, लेकिन यह एक बड़ी गति हिट होगी (और यह काफी गड़बड़ है)।

क्या किसी के पास इसे लागू करने के लिए कोई अन्य विचार है?

उत्तर

5

आप ग्रोवी क्लासलोडर को उप-वर्गीकरण करके और एएसटी विज़िटर के भीतर अपनी बाधाओं को लागू करके ऐसा कर सकते हैं। यह पोस्ट बताता है कि यह कैसे करें: http://hamletdarcy.blogspot.com/2009/01/groovy-compile-time-meta-magic.html

इसके अलावा, संदर्भित कोड ग्रोवी 1.6 इंस्टॉलर के नमूने फ़ोल्डर में है।

+1

कई (अधिकांश) मामलों में कक्षा जिस पर विधि है, संकलन समय पर ज्ञात नहीं होगा, इसलिए एएसटी को एनालज़ करना वास्तव में काम नहीं करेगा। फिर भी, यह सबसे अच्छा जवाब है इसलिए मैं इसे टिक कर दूंगा। मैंने मेटाक्लास का उपयोग करके एक सभ्य समाधान ढूंढना समाप्त कर दिया। –

2

ओएसजीआई इसके लिए बहुत अच्छा है। आप अपने कोड को बंडलों में विभाजित कर सकते हैं और सटीक सेट कर सकते हैं कि प्रत्येक बंडल क्या खुलासा करता है, और अन्य बंडलों के लिए। क्या वह काम तुम्हारे लिये होगा?

+0

यह मेरे विशिष्ट विधियों को कॉल करने से कोड को प्रतिबंधित करने की अनुमति है? –

+0

अवधारणा बंडल की तरह कुछ है। फिर आप उस बंडल के बाहर विधियों और सामान को प्रतिबंधित कर सकते हैं। –

+0

कड़ाई से बोलते हुए, आप कक्षा के कुछ तरीकों को बुलाए जाने से प्रतिबंधित नहीं कर सकते हैं, लेकिन आप अधिक विधियों के साथ बेस क्लास और बाल वर्ग बना सकते हैं, और केवल अधिक-प्रतिबंधित बेस क्लास तक पहुंच प्रदान कर सकते हैं। –

3

आपको कोहसुक से परियोजना groovy-sandbox पर एक नज़र डालना चाहिए। इस विषय पर अपने blog post here पर भी एक नज़र डालें और समाधान क्या हल कर रहा है: सैंडबॉक्सिंग, लेकिन प्रदर्शन दोष।

1

आप हाल ही में विकसित लाइब्रेरी जावा-सैंडबॉक्स (http://blog.datenwerke.net/p/the-java-sandbox.html) पर भी विचार कर सकते हैं जो जावा के भीतर से अविश्वसनीय कोड को सुरक्षित रूप से निष्पादित करने की अनुमति देता है।

यह भी देखें: http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html