Python: сделать eval безопасным [дубликат]
На этот вопрос уже есть ответ:
Python eval: все же опасно ли отключать встроенные функции и доступ к атрибутам? 6 ответовЯ хочу простой способ создания "API калькулятора" в Python.
Прямо сейчас меня не волнует, какой именно набор функций будет поддерживать калькулятор.
Я хочу получить строку, скажем"1+1"
и вернуть строку с результатом, в нашем случае"2"
.
Есть ли способ сделатьeval
безопасно для такой вещи?
Для начала я бы сделал
env = {}
env["locals"] = None
env["globals"] = None
env["__name__"] = None
env["__file__"] = None
env["__builtins__"] = None
eval(users_str, env)
чтобы вызывающий не мог связываться с моими локальными переменными (или видеть их).
Но я уверен, что здесь много слежу.
Являютсяeval
справлены проблемы с безопасностью @ или слишком много мелких деталей, чтобы все работало правильно?