मैं eval() का उपयोग कर एक अजगर स्ट्रिंग का मूल्यांकन कर रहा हूँ, और इस तरह के एक वर्ग है, तो:अविश्वासित तारों पर पायथन के eval() की सुरक्षा?
class Foo(object):
a = 3
def bar(self, x): return x + a
सुरक्षा जोखिम अगर मैं स्ट्रिंग पर भरोसा नहीं करते क्या हैं? विशेष रूप से:
eval(string, {"f": Foo()}, {})
असुरक्षित है? यही है, क्या आप ओएस या सीएस या फू इंस्टेंस से असुरक्षित कुछ तक पहुंच सकते हैं?eval(string, {}, {})
असुरक्षित है? यही है, क्या मैं पूरी तरह से लेन और सूची जैसे बिल्टिन से ओएस या sys तक पहुंच सकता हूं?- क्या अंतर्निहित संदर्भ में बिल्टिन मौजूद नहीं हैं?
जैसे कुछ असुरक्षित तार कर रहे हैं "[0] * 100000000" मैं, के बारे में परवाह नहीं है क्योंकि सबसे खराब वे धीमी गति से/कार्यक्रम बंद करो। मैं मुख्य रूप से कार्यक्रम के बाहर उपयोगकर्ता डेटा की सुरक्षा के बारे में चिंतित हूं।
स्पष्ट रूप से, eval(string)
कस्टम शब्दकोशों के बिना अधिकांश मामलों में असुरक्षित है।
हां, यदि स्ट्रिंग में आयात sys sys.dostuff है तो आप eval कर रहे हैं और आपको भरोसा नहीं है कि तारों की चीजें असली बदसूरत हो सकती हैं। – Vasil
eval अच्छी संपत्ति है केवल यह अभिव्यक्ति की अनुमति देता है। तो =, आयात, और प्रिंट जैसी चीजों की अनुमति नहीं है। –
'eval (' __ आयात __ ("sys") का प्रयास करें। Stdout.write ("हैलो जो") ') –