सर्वर साइड सैंडबॉक्सिंग स्क्रिप्टिंग के लिए मेरी पसंद क्या हैं? [बन्द है]


11

मैं एक सार्वजनिक वेबसाइट बना रहा हूँ जहाँ उपयोगकर्ता कुछ डेटा चलाने के लिए डेटा और स्क्रिप्ट साझा करते हैं। इस चक्र के बिना किसी अन्य प्रकार के सैंडबॉक्स में स्क्रिप्ट्स को सर्वर पर चलाया जाता है: मेरा पर्ल प्रोग्राम डेटाबेस से पढ़ता है जो एक उपयोगकर्ता द्वारा बनाई गई स्क्रिप्ट है, डेटा को स्क्रिप्ट में संसाधित करने के लिए जोड़ता है (यानी: एक JSON दस्तावेज़) तो दुभाषिए को कॉल करता है, इसे प्रतिक्रिया (एक JSON दस्तावेज़ या सादा पाठ) देता है, मैं इसे अपनी पर्ल स्क्रिप्ट के साथ डेटाबेस में सहेजता हूं। स्क्रिप्ट को स्क्रिप्टिंग भाषा में खुद के द्वारा जोड़े गए कार्यों में अंतर्निहित कुछ का उपयोग करने में सक्षम होना चाहिए, लेकिन अधिक कुछ नहीं।

इसलिए मैं एक जावास्क्रिप्ट इंटरप्रेटर के रूप में नोड.जेएस पर ठोकर खाई है, और Google के V8 के साथ घंटे या इतने पहले (क्या v8 इस तरह की चीज के लिए समझ में आता है?)। कॉफीस्क्रिप्ट भी मेरे दिमाग में आया, क्योंकि यह अच्छा लग रहा है और यह अभी भी जावास्क्रिप्ट है।

मुझे लगता है कि जावास्क्रिप्ट पर्याप्त और अधिक "सैंडबॉक्सेबल" है क्योंकि इसमें ओएस कॉल या दूरस्थ रूप से असुरक्षित कुछ भी नहीं है (मुझे लगता है)।

वैसे, मैं आगे के छोर के लिए पर्ल और Php पर सिस्टम लिख रहा हूँ।

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


यह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं। क्या यह संभव है? यकीन है, यह संभव है।
रॉबर्ट हार्वे

जवाबों:


3

जावा में अंतर्निहित जावास्क्रिप्ट दुभाषिया होता है। यह डिफ़ॉल्ट रूप से सैंडबॉक्स नहीं है, लेकिन इसे इसके द्वारा सक्षम किया जा सकता है:

  • सही कक्षा शटर सेट करना - जावास्क्रिप्ट आमतौर पर जावा कक्षाओं को लोड कर सकता है। क्लास शटर एक प्रकार का सुरक्षा प्रबंधक है जो यह तय करता है कि कौन सी कक्षाएं लोड की जा सकती हैं और कौन सी नहीं।
  • "स्टार्टअप" स्क्रिप्ट - लघु जावास्क्रिप्ट आरंभीकरण जो बाहरी सिस्टम तक पहुंच बिंदुओं को हटा देता है: java = undefined;Packages = undefined;org = undefined;

यदि आप ऐसा करते हैं, तो अंदर चल रही स्क्रिप्ट किसी भी तरह से बाहरी वातावरण तक नहीं पहुंच सकती हैं।

यह स्क्रिप्ट टाइम-आउट और इंस्ट्रक्शन काउंट को सीमित करने की कार्यक्षमता भी प्रदान करता है जो सैंडबॉक्सिंग के लिए उपयोगी है - आप यह सीमित कर सकते हैं कि स्क्रिप्ट कितनी लंबी या कितनी जटिल है।

मैंने इसे जावा 7 में इस्तेमाल किया है जिसमें राइनो जावास्क्रिप्ट इंजन है। जावा 8 में नया, अधिक आधुनिक इंजन नैसोर्न है - मैंने नैशॉर्न के साथ इसकी कोशिश नहीं की, लेकिन मुझे उम्मीद है कि यह समान होना चाहिए।


क्या आप ब्लैकलिस्ट के बजाय व्हाइटलिस्ट कर सकते हैं?
पेटा

@Petah, आप पहले सब कुछ अक्षम (ब्लैकलिस्ट) कर सकते हैं और फिर सैंडबॉक्स में ऑब्जेक्ट के रूप में कुछ विशिष्ट कार्यक्षमता को धक्का दे सकते हैं। यह तब अनिवार्य रूप से श्वेतसूची में है, इसलिए हां, आप ऐसा कर सकते हैं।
qbd

स्क्रिप्टिंग भाषा के रूप में इसे एक अच्छा विकल्प बनाने के लिए जावास्क्रिप्ट ज्ञान काफी व्यापक है। आप कुछ ग्लोबल्स के साथ-साथ उपयोगकर्ताओं के लिए कॉल को परिभाषित करना चाहते हैं क्योंकि आप कॉल तक पहुंच को प्रतिबंधित कर रहे हैं। यह सोचें कि ब्राउज़र windowइंटरैक्शन को सक्षम करने के लिए जावास्क्रिप्ट के लिए चर को कैसे परिभाषित करता है ।
माइकल शोपिन

2

मेरा पहला विचार नोड था। जेएस - जैसा कि आपने ऊपर बताया कि यह एक जावास्क्रिप्ट-दुभाषिया है। और अगर आपकी जरूरत है, तो आप वास्तव में सुरक्षित तरीके से स्क्रिप्ट को सैंडबॉक्स करना चाहते हैं।

एक और तरीका हो सकता है, कि आप हर कमांड को स्क्रिप्ट में चेक करें, अगर यह वैध है या नहीं। लेकिन मुझे नहीं लगता कि आपको एक सुरक्षित सैंडबॉक्स मिलेगा।

अभिवादन


क्या कोई सैंडबॉक्सिंग सुपरपोर्ट I NodeJS है या NodeJS के साथ उपलब्ध है?
ysdx

4
यह मिला: gf3.github.com/sandbox
ysdx

"NODE.JS के लिए NIFTY JAVASCRIPT SANDBOX" के शानदार लिंक के लिए +1।
जैक स्टोन

नोट: gf3 सैंडबॉक्स से बाहर तोड़ा जा सकता है।
पेटा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.