अधिकांश आधुनिक भाषाओं (जो किसी तरह व्याख्या की जाती हैं) में किसी प्रकार का निष्कासन कार्य होता है। ऐसा फ़ंक्शन मनमाने भाषा कोड को निष्पादित करता है, ज्यादातर समय मुख्य तर्क के रूप में एक स्ट्रिंग के रूप में पारित किया जाता है (विभिन्न भाषाएं eval फ़ंक्शन में अधिक सुविधाएँ जोड़ सकती हैं)।
मैं समझता हूँ कि उपयोगकर्ताओं को इस समारोह निष्पादित करने के लिए (अनुमति नहीं होनी चाहिए संपादित यानी प्रत्यक्ष या परोक्ष रूप एक मनमाना उपयोगकर्ता से मनमाने ढंग से इनपुट लेने के लिए प्रदान किया जाने वाला eval
,), विशेष रूप से सर्वर साइड सॉफ्टवेयर के साथ के बाद से वे दुर्भावनापूर्ण कोड निष्पादित करने के लिए प्रक्रिया को कर सकता है। इस तरह, ट्यूटोरियल और समुदाय हमें eval का उपयोग नहीं करने के लिए कहते हैं। हालाँकि, कई बार ऐसा होता है जहाँ eval उपयोगी और प्रयोग किया जाता है:
- सॉफ्टवेयर तत्वों के लिए कस्टम एक्सेस नियम (IIRC OpenERP में एक ऑब्जेक्ट है
ir.rule
जो डायनेमिक पायथन कोड का उपयोग कर सकता है)। - कस्टम गणना और / या मानदंड (OpenERP में फ़ील्ड की तरह कस्टम कोड गणना की अनुमति है)।
- OpenERP रिपोर्ट पार्सर (हां मुझे पता है कि मैं आपको OpenERP सामान के साथ बाहर निकाल रहा हूं ... लेकिन यह मेरे पास मुख्य उदाहरण है)।
- कुछ आरपीजी खेल में कोडिंग वर्तनी प्रभाव।
इसलिए उनका एक अच्छा उपयोग है, जब तक कि उनका उपयोग ठीक से किया जाता है। मुख्य लाभ यह है कि सुविधा अधिक फ़ाइलों को बनाने के लिए और उन्हें शामिल करने के बिना कस्टम कोड लिखने की अनुमति देती है (हालांकि eval सुविधाओं का उपयोग करने वाले अधिकांश फ्रेमवर्क में फ़ाइल, मॉड्यूल, पैकेज, ... से पढ़ने के लिए निर्दिष्ट करने का एक तरीका भी है)।
हालांकि, लोकप्रिय संस्कृति में बुराई बुराई है। आपके सिस्टम में तोड़-फोड़ करने जैसी बातें दिमाग में आती हैं।
हालांकि, ऐसे अन्य कार्य हैं जो उपयोगकर्ताओं द्वारा किसी भी तरह से एक्सेस किए जाने पर हानिकारक हो सकते हैं: अनलिंक, रीड, राइट (फाइल शब्दार्थ), मेमोरी एलोकेशन और पॉइंटर अंकगणित, डेटाबेस मॉडल एक्सेस (भले ही एसक्यूएल-इंजेक्टेबल मामलों पर विचार न करते हुए)।
इसलिए, मूल रूप से, अधिकांश समय जब कोई कोड ठीक से नहीं लिखा जाता है या ठीक से नहीं देखा जाता है (संसाधन, उपयोगकर्ता, वातावरण, ...), कोड बुराई है और यहां तक कि आर्थिक प्रभाव भी पैदा कर सकता है।
लेकिन eval
फ़ंक्शंस (भाषा की परवाह किए बिना) के साथ कुछ खास है ।
प्रश्न : क्या इस डर के लिए कोई भी ऐतिहासिक तथ्य लोकप्रिय संस्कृति का हिस्सा बन गया है, बजाय संभवतः अन्य खतरनाक विशेषताओं पर ध्यान देने के लिए?
eval
, इसमें एक आंतरिक फ़ंक्शन safe_eval
होता है, जो कोड को खतरनाक काम करने से रोकने के लिए वातावरण तैयार करता है। कीड़े पाए गए हैं, हालांकि, चूंकि पायथन एक काफी लचीली भाषा है, और इसलिए इसे नियंत्रित करना कठिन है।