Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 有没有可能有一个;安全评估;用于Python中的基本数学表达式?_Security_Python 3.x_Cpython - Fatal编程技术网

Security 有没有可能有一个;安全评估;用于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字节码集

关于沙盒CPython,SE上有很多问题,但大多数问题都集中在提供一个或多或少完整的Python环境上

在本例中,我感兴趣的是在基本数学表达式中使用Python,这种复杂性的东西,例如:

(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函数。从操作系统(通过操作系统忽略对系统开放函数的调用)限制进程似乎更可靠。我相信这是执行提交的代码的网站的方法。