2010-02-14 15 views
15

मैं Robocode इंजन का डेवलपर हूं। हम रोबोकोड बहुभाषी बनाना चाहते हैं और स्कैला अच्छा मैच प्रतीत होता है। हमारे पास स्कैला प्लगइन prototype here है।स्कैला रनटाइम की सुरक्षा

समस्या: क्योंकि उन रचनात्मक प्रोग्रामर रहे हैं, वे लड़ाई अलग अलग तरीकों से जीतने की कोशिश कर सकते हैं। साथ ही रोबोट ऑनलाइन डेटाबेस से डाउनलोड किए जाते हैं जहां कोई भी अपलोड कर सकता है। तो सुरक्षा में अंतर उपयोगकर्ता कंप्यूटर में सुरक्षा छेद का कारण बन सकता है। जावा में लिखे गए रोबोट प्रतिबंधित सैंडबॉक्स में चल रहे हैं। लगभग सबकुछ प्रतिबंधित है [नेटवर्क, जीयूआई, डिस्क (सीमित), धागे (सीमित), क्लासलोडर और प्रतिबिंब]। सैंडबॉक्स ब्राउज़र एप्लेट के समान है। हम SecurityManager, रोबोट प्रति कस्टम classloader, का उपयोग etc ...

दो तरीके कैसे Robocode में स्काला क्रम की मेजबानी के लिए कर रहे हैं:

1) सैंडबॉक्स के अंदर एक साथ इसे लोड रोबोट के साथ। हमारे लिए बहुत सुरक्षित, पसंदीदा समाधान। लेकिन यह स्कैला रनटाइम क्षमताओं को नुकसान पहुंचाएगा क्योंकि रनटाइम प्रतिबिंब का उपयोग करता है। शायद रनटाइम पर कक्षाएं उत्पन्न करता है? कुछ आंतरिक सफाई करने के लिए धागे का प्रयोग करें? JVM/internals तक पहुंच? (मैं भाषा की क्षमताओं को सीमित नहीं करना चाहूंगा)

2) स्केल रनटाइम का उपयोग बॉक्स के बाहर विश्वसनीय कोड के रूप में करें, पर जेडीके के समान स्तर पर सुरक्षा। दृश्यता (दुर्भावनापूर्ण) रोबोट। क्या स्कैला रनटाइम एपीआई सुरक्षित हैं? क्या उनके पास सुरक्षा गार्ड हैं? क्या कोई सुरक्षित तरीका है? क्या स्कैला रनटाइम में कोई सिंगलटन है, रोबोट के बीच संवाद करने के लिए दुर्व्यवहार किया जा सकता है? कोई भी concurency/थ्रेडपूल/मैसेजिंग जो थ्रेड अनुकरण कर सकता है? (क्या स्कैला रनटाइम के लिए कोई सुरक्षा ऑडिट है?)

3) रनटाइम के कुछ वर्गों और कुछ बाहर के बीच कुछ। रोबोट के लिए कौन से वर्ग/पैकेज दिखाना चाहिए/जो केवल निजी कार्यान्वयन हैं? (यह भविष्य समाधान लगता है)

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

मैं विशिष्ट उत्तर की तलाश में हूं, जो सुरक्षित समाधान का कारण बन जाएगा। यादृच्छिक विचारों का स्वागत है, लेकिन सम्मानित नहीं किया गया। scala email group पर चल रही चर्चा चल रही है। अभी तक कोई विशिष्ट जवाब नहीं है।

उत्तर

3

मुझे लगता है कि # 1 आपकी सबसे अच्छी शर्त है और यहां तक ​​कि यह एक चलती लक्ष्य है। मेलिंग सूची पर लाए जाने के रूप में, संरचनात्मक प्रकार प्रतिबिंब का उपयोग करते हैं। मुझे नहीं लगता कि मानक पुस्तकालय में संरचनात्मक प्रकार आम हैं, लेकिन मुझे नहीं लगता कि कोई भी कहां रहता है कि वे कहां हैं।

दृश्यों के पीछे प्रतिबिंब का उपयोग करके अन्य सुविधाएं भी हमेशा संभावना है। उदाहरण के लिए, 2.8 शाखा में थोड़ी देर के लिए कुछ सरणी कार्यक्षमता प्रतिबिंब का उपयोग कर रही थी। मुझे लगता है कि बेंचमार्किंग के बाद बदल दिया गया है, लेकिन हमेशा संभावना है कि कुछ समस्या है जहां किसी ने कहा "आह! मैं इसे हल करने के लिए प्रतिबिंब का उपयोग करूंगा।"

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

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

तो, संक्षेप में, मुझे नहीं लगता कि यह संभव है (प्रयास पर उचित बाधाओं के भीतर) स्केल के टुकड़ों को अलग और अलग करने के लिए जो (और चाहिए) भरोसा कर सकते हैं।

+0

प्रतिबिंब और सरणी के बारे में धागे से लिंक: http://thread.gmane.org/gmane.comp.lang.scala.internals/2590 –

+1

यहां कई अच्छे अंक हैं। आगे बढ़ने के लक्ष्य के बारे में, आप सही हैं, मुझे स्कैला के एकल संस्करण पर लॉक करने में खुशी है। "आह! के बारे में मैं इसे हल करने के लिए प्रतिबिंब का उपयोग करूंगा।" यह आपराधिक कृत्य है। मैं अपने उपयोगकर्ताओं/नए लोगों को हमारे समर्थन समूह में टूटा रनटाइम के बारे में शिकायत नहीं करना चाहूंगा, जिसका हमारे पास स्वामित्व नहीं है। यह मुझे स्पष्ट नहीं है कि रनटाइम कम से कम कुछ अपवाद को अपवाद रूपांतरित/परिवर्तित करेगा। क्या यह कम से कम AccessController.doPrivileged() ऐसे कार्यों के लिए करता है? –

+1

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

0

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

+0

हां, मुझे लगता है कि आप ऊपर जीएई टिप्पणी के समान दिशा में जाते हैं। –

+0

मैंने सोचा कि मैं एक टिप्पणी लिख रहा था, लेकिन वास्तव में मेरे पास दूसरों द्वारा पोस्ट किए गए उत्तरों पर टिप्पणी करने का अधिकार नहीं है। – itsnotvalid

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