2012-04-19 9 views
14

हम एक "उद्यम" उत्पाद में स्क्रिप्ट योग्य तत्व प्रदान करने का प्रयास कर रहे हैं। हम ग्रोवी का उपयोग करना चाहते हैं लेकिन हमें बहुत ही बुनियादी चीजों को सुरक्षित करने में कठिनाई हो रही है।जावा में अविश्वसनीय ग्रोवी स्क्रिप्ट सुरक्षा

उदाहरण के लिए, हम केवल

Class.forName("my.company.internal.SecruityTools").runAsAwesome(...) 

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

यह इस तरह लग रहा है एक बहुत ही आम/चर्चा की समस्या है, लेकिन मैं नहीं मेरे जीवन के लिए कैसे नीचे एक बहुत बड़ी आवेदन के संदर्भ में साथ अविश्वसनीय लिपियों लॉक करने के लिए पर एक पुस्तकालय या यहां तक ​​कि एक अच्छा ब्लॉग पोस्ट पा सकते हैं होगा ।

क्या किसी ने यह सफलतापूर्वक किया है? क्या मैं कुछ स्पष्ट पदों/अवधारणाओं को याद कर रहा हूं? क्या इसके लिए पहले से ही एक ठोस पुस्तकालय है? शायद Groovy.tinFoilHatMode(true)?

+4

शायद [इसी तरह के एक प्रश्न पर यह उत्तर] (http://stackoverflow.com/a/6490674/274466) कुछ सहायता है? उत्तर [इस ब्लॉग पोस्ट] (http://www.jroller.com/melix/entry/customizing_groovy_compilation_process) को इंगित करता है, जो इस तरह की चीज़ को रोकने के लिए एक व्यावहारिक तंत्र प्रदान करता है ... – ig0774

+0

यदि मुझे गलत नहीं है, तो वहां हैं कुछ गतिशील भाषा विशेषताएं जो किसी भी प्रकार की एएसटी सुरक्षा को रोक सकती हैं। ऑब्जेक्ट की तरह कुछ। ("जीई" + टी "+" क्लासलोडर ")।" Fo "+ $ rname या उस तरह मूर्खतापूर्ण। –

+1

@ एंबियंस क्या आपने ig0774 द्वारा सुझाई गई प्रक्रियाओं का प्रयास किया है? मुझे विश्वास नहीं है कि आप उन्हें बच सकते हैं आपके जैसे चालें सुझाव देते हैं, और यदि आप कर सकते हैं, तो यह कुछ ऐसा है जो ग्रोवी टीम एएसएपी को वापस रिपोर्ट किया जाना चाहिए। –

उत्तर

5

Groovy Sandbox पर एक नज़र डालें। आप System.exit(0) या new File(“/etc/passwd”) जैसी चीज़ों को रोकने के लिए इसका उपयोग कर सकते हैं।

1

आप उपयोग कर GroovyCodeSource

+0

अगर मैं गलत हूं, तो मुझे सही करें, लेकिन ऐसा लगता है कि संकलित स्रोतों के आसपास स्पष्ट रूप से लपेटा गया है और स्क्रिप्ट के लिए नीति को संकुचित करने में मदद करता है। हमारा कोड मूल्यांकन धागे में सभी स्रोतों के लिए एक बहुत सख्त नीति परिभाषित करता है। तो इससे हमें हमारी अनुमति का "गुंजाइश" करने में मदद मिलेगी, लेकिन क्लास का कारण बनने के लिए जादुई कुछ भी नहीं करता है .forName अनुमतियों को सत्यापित करने के लिए अनुमति नहीं है (ऐसा नहीं है कि मैं केवल आंतरिक ग्रोवी संदर्भों को देख सकता हूं)। –

2

java-sandbox पर एक नज़र डालें पर ध्यान दिया है। ग्रोवी के साथ इसका उपयोग करने का एक ट्यूटोरियल भी है: http://blog.datenwerke.net/2013/06/sandboxing-groovy-with-java-sandbox.html

+0

मुझे इस पर एक नज़र डालेंगे जब मुझे वापस सर्कल करने का मौका मिलेगा, धन्यवाद! –

1

हम क्या कर समाप्त हो गया ऊपर चीजों में से एक संयोजन था, लेकिन असली मैजिक सॉस this AST transformer कि एक पहुँच जाँच में (this, या एक अंतर्निहित this सहित) किसी भी अभिव्यक्ति लिपटे को लागू किया गया था।

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