虽然SE上有很多关于沙盒CPython的问题,但大多数都专注于提供一个或多或少完整的Python环境。
在这种情况下,我有兴趣将Python用于基本数学表达式,这种复杂性,例如:
(sin(a) * cos(b) / tan(c) ** sqrt(d)) - e
现在我可以在 Python中创建我自己的表达式求值程序,但是我不想牺牲性能(或者必须维护它并且在所有角落都具有良好的Python兼容性例)
我调查了numba
和numexpr
这两个非常有趣的项目,但都没有安全/沙盒作为目标。
我考虑编写ceval.c
的最小版本,它运行一组受限制的CPython字节码,但这仍然是一些努力。
相反,我做了quick test限制名称空间并在执行之前检查已编译的表达式操作码,从我的初始测试开始,这很有效,尽管我并不完全相信它的安全要么。
虽然这不是明确的,但使用简单的表达方式意味着我不一定需要:
所以我的问题是:
是否有可靠的安全方法在CPython中执行数学表达式,它们可以在与完整CPython脚本相同的过程中共存?
请注意,由于安全性可能过于含糊不清,为了讨论的目的。
读取或删除用户系统上的文件。
正在open
或os
中运行shutil
或任何功能。