2013-04-15 63 views
1

按照PyPy docs「的建宏的名字總是引用內置模塊,從來沒有一本字典,因爲它有時是CPython的。分配給內建沒有任何影響。」例如在CPython中:是否可以限制PyPy中的內建函數?

>>> eval("__import__('os').system('clear')", {'__builtins__':{}}) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 1, in <module> 
NameError: name '__import__' is not defined 

在PyPy中運行它時沒有錯誤。是否有另一種限制可用內置的方法?

回答

2

不,很久以前就決定我們不提供這個服務。也許我們現在可以重新考慮它,但請注意,它只會帶來虛假的安全感。在由第三方提供的字符串上調用eval()是從不安全,即使您使用{'__builtins__':{}}的技巧。見Python: make eval safe

+0

感謝您的回覆。我知道空的'__builtins__'技巧不足以確保安全性,這僅僅是一個例子。 – gsakkis

相關問題