为了账号安全,请及时绑定邮箱和手机立即绑定

Python:使eval安全

Python:使eval安全

POPMUISE 2019-09-24 16:17:32
我想要一种简单的方法来在Python中执行“计算器API”。现在,我不太在乎计算器将要支持的确切功能集。"1+1"在我们的例子中,我希望它接收一个字符串,说并返回一个带有结果的字符串"2"。有办法eval确保这种事情的安全吗?首先我会做env = {}env["locals"]   = Noneenv["globals"]  = Noneenv["__name__"] = Noneenv["__file__"] = Noneenv["__builtins__"] = Noneeval(users_str, env)这样调用者就不会弄乱我的局部变量(或查看它们)。但是我敢肯定,我在这里监督很多。eval安全性问题是否可以解决,或者是否有太多微小的细节无法使其正常工作?
查看完整描述

4 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-09-24
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

安全问题无法解决(甚至无法解决)。


我将使用pyparsing该表达式将其解析为标记列表(这不会太困难,因为语法很简单),然后分别处理这些标记。


您也可以使用该ast模块来构建Python AST(因为您使用的是有效的Python语法),但这可能会带来一些细微的安全漏洞。


查看完整回答
反对 回复 2019-09-24
  • 4 回答
  • 0 关注
  • 751 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信