2011-06-02 21 views
12

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

मैं विभिन्न संभावनाओं का अध्ययन किया है और अंतिम समाधान इन का एक संयोजन हो सकता है:

  • भागो एक बहुत ही सीमित सुरक्षा प्रबंधक भीतर स्क्रिप्ट। स्क्रिप्ट को किसी भी अनुमति सुरक्षा प्रबंधक के भीतर चलाया जाता है। अतिरिक्त अनुमतियां घोषित की जानी चाहिए (एंड्रॉइड की तरह)।

  • लॉन्च एक नई JVM। Runtime.exec के आस-पास एक स्क्रिप्टप्रोसेस रैपर बनाएं और सुरक्षा प्रबंधक, सीमित ढेर इत्यादि के साथ एक नया JVM स्पॉइंग करें। क्योंकि हम एक पूर्ण उड़ा प्रक्रिया शुरू करते हैं, हम मॉनिटर खराब व्यवहार वाले लोगों पर अधिक नियंत्रण प्राप्त कर सकते हैं? संसाधन में लागत हालांकि सख्त होगी ... यहां एक विकल्प का उपयोग एंट का उपयोग करना होगा, लेकिन क्या यह स्केलेबल होगा?

  • जावा मॉनिटर एपीआई जावा 6 में निगरानी क्षमता वाला एक पैकेज है। हम धागे की निगरानी कर सकते हैं और शायद अनंत लूप और मेमोरी खपत का पता लगा सकते हैं। किसी ने इसका इस्तेमाल किया?

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

उत्तर

8

एक अतिरिक्त संभावना GroovyShell पर ग्रोवी 1.8 संकलन अनुकूलक का उपयोग कर रही है जो एम्बेडेड स्क्रिप्ट चलाती है। आप कक्षाओं और विधियों को पूर्व-आयात कर सकते हैं, ग्रोवी एएसटी के उपयोग को प्रतिबंधित कर सकते हैं, और एएसटी रूपांतरण को पूर्व-लागू कर सकते हैं, जैसे कि @ थ्रेड इंटरप्ट, @ टिमड इंटरप्ट, या @ कंडिशन इंटरप्ट। पर विवरण:

http://www.jroller.com/melix/entry/customizing_groovy_compilation_process

+0

हाँ मुझे लगता है कि यह जाने का रास्ता है। मैं अंतर्निहित कस्टमाइज़र और ट्रांसफार्मर पर एक नज़र डालेगा। अगर किसी के पास पहले से निर्मित तंग अनंत लूप और मेमोरी खपत सीमाएं हैं जो भयानक होंगी। –

2

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

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