2013-04-15 1 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() на строку, предоставленную третьим лицом, - never безопасен, даже если вы используете трюк {'__builtins__':{}}. См. Python: make eval safe.

+0

Спасибо за ответ. Я знаю, что пустой трюк '__builtins__' недостаточно для обеспечения безопасности сам по себе, это был всего лишь пример. – gsakkis