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安全性问题是否可以解决,或者是否有太多微小的细节无法使其正常工作?


POPMUISE
浏览 752回答 4
4回答

qq_遁去的一_1

可以访问过程中已定义的任何类,然后可以实例化它并在其上调用方法。可以对CPython解释器进行分段处理,或使其退出。看到这个: 评估确实很危险

一只斗牛犬

安全问题无法解决(甚至无法解决)。我将使用pyparsing该表达式将其解析为标记列表(这不会太困难,因为语法很简单),然后分别处理这些标记。您也可以使用该ast模块来构建Python AST(因为您使用的是有效的Python语法),但这可能会带来一些细微的安全漏洞。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python