मैं चाहता हूं कि मेरा ऐप अविश्वसनीय उपयोगकर्ता से अभिव्यक्ति का मूल्यांकन करे, कि मैं एक JSON फ़ाइल से पढ़ रहा हूं। जैसे:सैंडबॉक्स में उपयोगकर्ता अभिव्यक्तियों का मूल्यांकन कैसे करें
value = "(getTime() == 60) AND isFoo('bar')"
मुझे यहां स्टैक ओवरव्लो पर इसके बारे में कई धागे मिल गए हैं। आम तौर पर जावा की अपनी स्क्रिप्टइंजिन क्लास का उपयोग करने की सिफारिश करते हैं, जो जावास्क्रिप्ट को पढ़ सकते हैं। http://java-source.net/open-source/expression-languages
लेकिन वे सभी एक विश्वसनीय उपयोगकर्ता (पूर्व .: एक विन्यास फाइल आप अपने आप को लिखने पर भरोसा करने लगते हैं और: या उपयोगकर्ता की सिफारिश या तो इस तरह के JEXL, MVEL, या इस सूची में से किसी अन्य के रूप में एक मौजूदा पुस्तकालय का उपयोग करने के इसमें कुछ स्क्रिप्टिंग करना चाहते हैं)। लेकिन मेरे मामले में, मैं अपने अभिव्यक्ति मूल्यांकन को एक सुरक्षित सैंडबॉक्स में चलाने के लिए चाहता हूं। तो उपयोगकर्ता कुछ आसान नहीं कर सकता:
value = "while(true)" // or
value = "new java.io.File(\"R:/t.txt\").delete()" // this works on MVEL
और मेरे ऐप को लॉक करें, या अवांछित संसाधनों तक पहुंचें।
1) तो क्या उन मौजूदा पुस्तकालयों में से कोई भी आसानी से कॉन्फ़िगर किया जा सकता है ताकि यह एक सुरक्षित बॉक्स पर चल सके? 'आसानी से' से, मेरा मतलब उच्च स्तरीय कॉन्फ़िगरेशन एपीआई है जो मेरे अपने अभिव्यक्ति मूल्यांकनकर्ता को लिखने के लिए उपयोग करने के लिए तेज़ होगा। अपने स्वयं के शोध का थोड़ा सा करने के बाद, जेएक्सएल और एमवीईएल दोनों बाहर निकलते प्रतीत होते हैं।
2) या क्या कोई मौजूदा अभिव्यक्ति भाषा है जो बेहद सरल है ताकि इसका उपयोग अविश्वसनीय उपयोगकर्ता द्वारा नहीं किया जा सके? जो कुछ मैंने पाया वह बहुत ही जटिल है, और लूप, आयात कथन आदि जैसी चीजों को लागू करता है। मुझे गणित, तर्क ऑपरेटर और अपने स्वयं के परिभाषित चर और विधियों को पार्स करना है। इससे परे कुछ भी मेरे दायरे से बाहर है।
3) यदि एकमात्र समाधान मेरा स्वयं का अभिव्यक्ति मूल्यांकनकर्ता लिखना है, तो मुझे लगातार सुरक्षा मॉडल कैसे लिखना है, इस पर कुछ मार्गदर्शन कहां मिल सकता है? मैं इसके लिए नया हूं, और इस बारे में कोई जानकारी नहीं है कि कोड इंजेक्शन के लिए उपयोग की जाने वाली आम चाल क्या हैं। यही कारण है कि मैं इसे खुद लिखने से बचना चाहता था।
वहाँ निम्नलिखित प्रश्न (जो अविश्वसनीय जावा कोड का थोड़ा कठिन स्थिति से संबंधित है) से कुछ उपयोगी जानकारी हो सकती है: http://stackoverflow.com/प्रश्न/9041246/क्या-सुरक्षा-जोखिम-i-चाहिए-guard-against-when-running-user-supplied-ja/9041423 # 9041423 – DNA
क्या आपको कभी इस प्रश्न का उत्तर मिला? – ccleve
कुछ भी नहीं जो मुझे संतुष्ट करेगा। मैंने बस इसे अपना खुद का निर्माण करने और इसे जाने के बारे में सीखने का फैसला किया। – VIBrunazo