2010-11-09 23 views
35

लुआ और जावास्क्रिप्ट ऑब्जेक्ट-क्षमता मॉडल का समर्थन करता है, इस निष्कर्ष के साथ कि setfenv के माध्यम से कार्यों को कॉल करने के लिए पर्यावरण को प्रतिबंधित करने के लिए समर्थन की वजह से, और अपरिवर्तनीय वस्तुओं के असंगत संदर्भों की संभावना के कारण, ओसीएम लागू किया जा सकता है, इसके बारे में some discussion on the cap-talk mailing list रहा है।लुआ के लिए क्षमताओं: क्या अनुभव है?

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

कुछ लिंक:

  1. पुराने तो सवाल: From Objects To Capabilities
  2. लुआ विकि: How can I create a secure Lua sandbox?
  3. erights.org पर पृष्ठभूमि SandBoxes और ReadOnlyTables - पता चलता कार्रवाई में setfenv; सारणी के पीछे मूल विचार दिखाता है, जो सही परिस्थितियों में, केवल
+5

लगता है जैसे आपने अपना होमवर्क किया है। आप वास्तव में क्या खो रहे हैं? – Zecc

+3

रिकॉर्ड के लिए, मुझे लगता है कि लूआ * ओसीएम का समर्थन करने में * निश्चित रूप से सक्षम * है। कम से कम, आप liolib.c और loslib.c के स्रोत कोड को संपादित कर सकते हैं। यह अपेक्षाकृत सरल होना चाहिए, क्योंकि कोड इतना जटिल नहीं है। – Zecc

+1

@Zecc: सिद्धांत की वास्तविक कहानियां लागू, सफलतापूर्वक, या नहीं। किसी भी पैमाने पर जो भी हो। कैप-टॉक मेल सूची को याद दिलाने के लिए –

उत्तर

3

मैं लुआ से बात नहीं कर सकता लेकिन जावास्क्रिप्ट के लिए, काजा में उचित सैंडबॉक्स बनाने के लिए टूलींग है, केवल कुछ कार्यों तक पहुंच सीमित है। यह मूल रूप से HTML/JS विजेट्स (जैसे iGoogle पर उपयोग किए गए) के लिए एक सैंडबॉक्स बनाने के लिए बनाया गया था।

http://code.google.com/p/google-caja/

यहाँ अपने मुखपृष्ठ से परियोजना का विवरण दिया:

काजा (उच्चारण "KA-हा"), एक स्पेनिश शब्द का अर्थ है कि बॉक्स, बैंक, नकदी रजिस्टर है, तिजोरी; क़ीमती सामान के लिए एक कंटेनर। एक वेब डेवलपर एचटीएमएल, जावास्क्रिप्ट, और सीएसएस जैसे पारंपरिक उपकरण का उपयोग करता है; और काजा एक कंपाइलर (एक "कैजोलर") प्रदान करता है जो वेब एप्लिकेशन लेता है और "cajoled" HTML वेब एप्लिकेशन बनाता है। कैजोलर स्थिर विश्लेषण, करके सुरक्षा गुणों को सत्यापित करने का प्रयास करता है और जहां यह रनटाइम चेक जोड़ने के लिए इनपुट को फिर से लिख नहीं सकता है।

चूंकि वेब अनुप्रयोग ब्राउज़र एपीआई के का सामान्य उपयोग करते हैं, उदा। डीओएम एपीआई, जो वेब पेज पर पर बड़ी मात्रा में नियंत्रण देता है, कैजा एपीआई प्रदान करता है जो डोम के आभासीकरण को वर्चुअलाइज करते हैं। एक युक्त पेज की स्थापना आवेदन के वातावरण इतना embedding कि एम्बेडेड आवेदन सोचता यह एक पूरे पृष्ठ के डोम के साथ बातचीत कर रहा है सकते हैं, लेकिन वास्तव में केवल एक तंत्र बुलाया के माध्यम से युक्त पृष्ठ की एक घिरे भाग से छेड़छाड़ आभासी iframes।

जावास्क्रिप्ट कि एक कैजा एप्लिकेशन उपयोग जावास्क्रिप्ट (वास्तव में EcmaScript5) के असफल स्टॉप सबसेट में लिखा गया है। इस सबसेट को "वालिजा" कहा जाता है, जिसमें लगभग पूरी जावास्क्रिप्ट भाषा, शामिल है, लेकिन कुछ त्रुटि-प्रवण संरचनाएं जैसे को कैसे निकाला जा सकता है और प्रतिबंधित करता है।

+0

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