Python: 使 eval 安全

10 浏览
0 Comments

Python: 使 eval 安全

我想要在Python中实现一个“计算器API”的简单方法。

目前我并不太关心计算器将支持的精确功能集。

我希望它能接收一个字符串,比如 "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 的安全问题可修复吗?还是有太多细微的细节需要注意才能使其正常工作?

0