Security 有没有可能有一个;安全评估;用于Python中的基本数学表达式?
关于沙盒CPython,SE上有很多问题,但大多数问题都集中在提供一个或多或少完整的Python环境上 在本例中,我感兴趣的是在基本数学表达式中使用Python,这种复杂性的东西,例如:Security 有没有可能有一个;安全评估;用于Python中的基本数学表达式?,security,python-3.x,cpython,Security,Python 3.x,Cpython,关于沙盒CPython,SE上有很多问题,但大多数问题都集中在提供一个或多或少完整的Python环境上 在本例中,我感兴趣的是在基本数学表达式中使用Python,这种复杂性的东西,例如: (sin(a)*cos(b)/tan(c)**sqrt(d))-e 现在我可以用Python创建自己的表达式求值器了,但是我不想牺牲性能(或者必须维护它,并且对所有情况都具有良好的Python兼容性) 我研究了和,这两个项目都非常有趣,但都没有安全性/沙盒作为目标 我考虑编写一个运行有限的CPython字节码集
(sin(a)*cos(b)/tan(c)**sqrt(d))-e
现在我可以用Python创建自己的表达式求值器了,但是我不想牺牲性能(或者必须维护它,并且对所有情况都具有良好的Python兼容性)
我研究了和,这两个项目都非常有趣,但都没有安全性/沙盒作为目标
我考虑编写一个运行有限的CPython字节码集的ceval.c
的最小版本,但这仍然是一项相当大的工作
相反,我做了一个限制名称空间的测试,并在执行之前检查编译的表达式操作码,从我的初始测试来看,这工作得很好,尽管我也不完全相信它的安全性
虽然这并不明确,但使用简单的表达式意味着我不一定需要:
- 多行代码
- 导入语句
- 定义函数和类
- getattr或getitem访问
- for&while循环
所以我的问题是: 是否有一种可靠安全的方法来执行CPython中的数学表达式,这种方法可以与完整的CPython脚本在同一进程中共存
注意,出于讨论的目的,安全性这个术语可能太模糊。 正在读取或删除用户系统上的文件。
运行
open
或os
或shutil
中的任何函数的问题太模糊了。安全与威胁有关。在python列表中讨论这一点可能更好,可以在news.gmane.org上访问gmane.comp.python.general.trusted澄清安全性(参见脚注)。在“处于相同进程”条件下,我确信澄清问题的答案是“否”。即使在单独的进程中,也很难绝对阻止从Python内部访问open函数。从操作系统(通过操作系统忽略对系统开放函数的调用)限制进程似乎更可靠。我相信这是执行提交的代码的网站的方法。