मैं कुछ अन-सत्यापित स्क्रिप्ट चलाने के लिए देख रहा हूं (अभी तक निर्धारित भाषा में लिखा गया है, लेकिन जावा-आधारित होने की आवश्यकता है, इसलिए जेआरबी, ग्रोवी, जैथन, बीनशेल, आदि सभी उम्मीदवार हैं)। मैं चाहता हूं कि ये स्क्रिप्ट कुछ चीजें करने में सक्षम हों और अन्य चीजों को करने से प्रतिबंधित हों।जावा स्क्रिप्टिंग (JRuby, Jython, Groovy, BeanShell, आदि) के साथ सुरक्षा
आम तौर पर, मैं सिर्फ जावा के सुरक्षा प्रबंधक का उपयोग करता हूं और इसके साथ किया जाता हूं। यह बहुत आसान है और मुझे फ़ाइल और नेटवर्क एक्सेस, जेवीएम को बंद करने की क्षमता आदि को प्रतिबंधित करने देता है और यह उच्च स्तर की सामग्री के लिए अच्छी तरह से काम करेगा जो मैं बंद करना चाहता हूं।
लेकिन कुछ सामान हैं जिन्हें मैं अनुमति देना चाहता हूं, लेकिन केवल मेरे कस्टम एपीआई/लाइब्रेरी के माध्यम से जो मैंने प्रदान किया है। उदाहरण के लिए, मैं yahoo.com पर URLConnection को खोलने के लिए प्रत्यक्ष नेटवर्क पहुंच की अनुमति नहीं देना चाहता, लेकिन अगर यह MyURLConnection के साथ किया जाता है तो मैं ठीक हूं। यही है - विधियों/वर्गों का एक समूह है जिसे मैं अनुमति देना चाहता हूं और फिर बाकी सब कुछ मैं सीमा से बाहर होना चाहता हूं।
मुझे विश्वास नहीं है कि इस प्रकार की सुरक्षा मानक जावा सुरक्षा मॉडल के साथ की जा सकती है, लेकिन शायद यह कर सकती है। मेरे पास स्क्रिप्टिंग भाषा में प्रदर्शन या लचीलापन के लिए एक विशिष्ट आवश्यकता नहीं है (स्क्रिप्ट मूल रूप से लूपिंग/ब्रांचिंग के साथ मेरे एपीआई के लिए सरल प्रक्रियात्मक कॉल होगी)। तो यहां तक कि एक "बड़ा" ओवरहेड जो प्रत्येक प्रतिबिंब कॉल पर सुरक्षा जांच की जांच करता है, वह मेरे द्वारा ठीक है।
सुझाव?
धन्यवाद - यह वास्तव में सहायक है। बीटीडब्ल्यू - मेरे लिए उपयोग का मामला लोगों को http://browsermob.com पर चलाने के लिए अपने लोड परीक्षणों के लिए स्क्रिप्ट अपलोड करने की अनुमति देना है। मैंने राइनो को नहीं देखा था, लेकिन ऐसा लगता है कि यह तब तक काम कर सकता है जब तक यह जावा एपीआई जैसे ग्रोवी के लिए सीधे पहुंच की अनुमति नहीं देता है। –
हाँ - आपके पास अधिक नियंत्रण है, जो सुरक्षा परिप्रेक्ष्य से अच्छा है। आपको कुछ एपीआई के लिए रैपर बनाना पड़ सकता है और फिर उन ऑब्जेक्ट्स का पर्दाफाश करना पड़ सकता है। उदाहरण के लिए, हमारे पास वर्कफ़्लो इंजन है, और वर्कफ़्लो ऑब्जेक्ट बनाया है जिसे हम जावास्क्रिप्ट से अवगत कराते हैं, जो नियंत्रित करता है कि आप क्या कर सकते हैं। –
त्वरित अनुवर्ती: आपने यह कैसे सुनिश्चित किया कि पैकेज चर परिवर्तनीय नहीं है? Http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/ –