2013-06-11 6 views
5

निर्दिष्ट करने के लिए इवल को सीमित करना चाहता हूं, मुझे कॉन्फ़िगरेशन के लिए "डेटा के रूप में कोड" के विचार से प्यार है, क्योंकि आप कक्षाओं से प्राप्त सत्यापन को वही सत्यापन है जिसे आप कॉन्फ़िगरेशन फ़ाइल के लिए चाहते हैं। ट्विटर ने एक अच्छा इवल उपयोगिता लिखी जो इसे आसान बनाता है (https://github.com/twitter/util)। मैं उपयोगकर्ताओं को रिमोट सेवा में कॉन्फ़िगरेशन फ़ाइलों को अपलोड करने की अनुमति देना चाहता हूं। इससे मेरी रिमोट सेवा के खिलाफ कोड इंजेक्ट करने की क्षमता खुलती है।कोड इंजेक्शन को रोकने के लिए आप ट्विटर के स्कैला इवल को कैसे मजबूर कर सकते हैं? मैं कॉन्फ़िगरेशन पैरामीटर

उदाहरण के लिए, अगर मैं निम्नलिखित config मामले वर्ग है:

case class MyConfig(param1: String) 

मैं चाहूँगा उपयोगकर्ता आदेश युक्त एक फ़ाइल अपलोड करने के लिए सक्षम होने के लिए:

MyConfig(param1 = "My Param Value") 

... लेकिन कमांड वाली फ़ाइल नहीं:

MyConfig(param1 = {import someDangerousPackage; someDangerousCommand(); "My Param Value"}) 

क्या यह सुनिश्चित करने के लिए संकलन को रोकने का कोई तरीका है कार्यों को बुलाया जा रहा है?

+3

यदि आपके पास पहले से ही केस क्लास हैं, तो आप कॉन्फ़िगरेशन फ़ाइल के लिए टाइपएफ़ कॉन्फ़िगरेशन का उपयोग क्यों नहीं करते हैं और इसे वहां से निकालते हैं? – drexin

+1

http://code.google.com/p/scalascriptengine/ पर एक नज़र डालें, मुझे लगता है कि वे कुछ बुनियादी सुरक्षा विकल्प प्रदान करते हैं – vitalii

+0

यदि मैं टाइपएफ़ कॉन्फ़िगर होकॉन फ़ाइल का उपयोग कर केस क्लास इंस्टेंस बना और मान्य करता हूं, तो मेरी लाइन संख्या प्रतिबिंबित होगी जनरेटेड केस क्लास, मूल होकॉन नहीं - जब तक कि मैं दृष्टिकोण को गलत समझ नहीं पा रहा हूं ... –

उत्तर

0

लोग पैकेज आयात किए बिना खतरनाक कोड जोड़ सकते हैं; आरएम जारी करने के लिए कोड की कितनी लाइनें लेती हैं ... कमांड?

सबसे अच्छा समाधान लोगों को कॉन्फ़िगरेशन के लिए कोड भेजने देना नहीं है; बस एक एक्सएमएल पार्सर या इस तरह का उपयोग करें। केवल एकमात्र वास्तव में सुरक्षित विकल्प स्वयं को अपलोड करने के लिए और कीवर्ड की सख्त श्वेतसूची (और उद्धृत तारों) की तुलना करने के लिए उन्हें उपयोग करने की अनुमति होगी। इस बिंदु तक आप अपने स्वयं के दुभाषिया को लिखने के लिए आधे रास्ते हैं और अभी भी कई गलतियों के प्रति संवेदनशील हैं, इसलिए पाठ फ़ाइलों को पार्स करना आलसी विकल्प के साथ-साथ सुरक्षित एक जैसा प्रतीत होता है।

+0

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

+0

@ToddFlanders कृपया प्रश्न बंद करें –

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

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