是否可以拥有" safe_eval"对于Python中的原始数学表达式?

时间:2016-03-20 15:20:15

标签: security python-3.x cpython

虽然SE上有很多关于沙盒CPython的问题,但大多数都专注于提供一个或多或少完整的Python环境。

在这种情况下,我有兴趣将Python用于基本数学表达式,这种复杂性,例如:

(sin(a) * cos(b) / tan(c) ** sqrt(d)) - e

现在我可以在 Python中创建我自己的表达式求值程序,但是我不想牺牲性能(或者必须维护它并且在所有角落都具有良好的Python兼容性例)

我调查了numbanumexpr这两个非常有趣的项目,但都没有安全/沙盒作为目标。

我考虑编写ceval.c的最小版本,它运行一组受限制的CPython字节码,但这仍然是一些努力。

相反,我做了quick test限制名称空间并在执行之前检查已编译的表达式操作码,从我的初始测试开始,这很有效,尽管我并不完全相信它的安全要么。

虽然这不是明确的,但使用简单的表达方式意味着我不一定需要:

  • 多行代码。
  • import statements。
  • 定义功能&类。
  • getattr或getitem access。
  • for& while loops。

所以我的问题是:

是否有可靠的安全方法在CPython中执行数学表达式,它们可以在与完整CPython脚本相同的过程中共存?

请注意,由于安全性可能过于含糊不清,为了讨论的目的。 读取或删除用户系统上的文件。 正在openos中运行shutil或任何功能。

0 个答案:

没有答案