Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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
如何最有效、最安全地模拟Python shell?_Python_Shell_Numpy_Pandas_Javascript - Fatal编程技术网

如何最有效、最安全地模拟Python shell?

如何最有效、最安全地模拟Python shell?,python,shell,numpy,pandas,javascript,Python,Shell,Numpy,Pandas,Javascript,为了提供有关数据分析的交互式示例,我想嵌入一个交互式python shell。它不一定是一个真正的Python shell。应向用户提供可在shell中执行的任务。这类似于现有的教程,如上所示,但据我所知,我希望使用这些解决方案不提供的库 为了在网站上获得真正的外壳,我想到了两种方法: 我发现了这样的项目,但似乎很难包含必要的库,如SciPy、NumPy和Pandas。此外,必须验证用户输入,我不确定这是否适用于我找到的shell 我可以通过web应用程序将命令传输到我服务器上的Python安

为了提供有关数据分析的交互式示例,我想嵌入一个交互式python shell。它不一定是一个真正的Python shell。应向用户提供可在shell中执行的任务。这类似于现有的教程,如上所示,但据我所知,我希望使用这些解决方案不提供的库

为了在网站上获得真正的外壳,我想到了两种方法:

  • 我发现了这样的项目,但似乎很难包含必要的库,如SciPy、NumPy和Pandas。此外,必须验证用户输入,我不确定这是否适用于我找到的shell

  • 我可以通过web应用程序将命令传输到我服务器上的Python安装,但我害怕在外来的任意代码上使用
    eval()
    。Python有安全模式吗?我找到了。尽管它们提供了Python沙箱,但不幸的是,它们不支持我需要的库

  • 或者,我想只嵌入一个“假shell”,我构建它是为了复制我想要解释的函数的行为。当然,这将导致更多的工作,因为我将不得不编写一个假的接口,但现在看来这是唯一的可能性


我希望这个问题不要太笼统;我正在寻找一个好的HTML/JS库,它可以帮助我在我的网站上放置一个假的shell,或者一个库/服务/软件,它可以嵌入一个安装了所需模块的真实Python shell。

没有办法安全地运行不受信任的Python;Python的动态特性允许使用太多的方法来突破您可能想到的任何保护层

相反,在一个新的虚拟机上运行每个会话,该虚拟机被正确地锁定(防火墙、无特权用户),您在一个困难的时间限制后关闭。新会话将获得新的、干净的虚拟机


这会将您与任何可能运行并试图突破沙箱的恶意代码隔离开来;好的虚拟机是由处理器与主机操作系统隔离的硬件,这是纯Python层永远无法实现的。

此过程有时称为沙箱。 你可以找到一些

基本上有三种选择:

  • 机器级机制(如Martijn Pieters建议的VM)
  • 操作系统级机制(如or)
  • 自定义解释器,例如pypy(,如您所提到的),或者,您可以在其中使用Java安全管理器或小程序机制
您可能还需要检查,这对于非常受限的环境特别有用,但安全性将取决于其配置

最终,您对解决方案的选择将取决于您想要限制的内容:

  • 文件系统访问?阻止所有内容,还是允许某些目录
  • 网络访问,如套接字
  • 任意系统调用

python virtualenv可能会有所帮助?感谢您的反馈。当然,虚拟机将与主系统隔离。然而,它是否仍然容易被滥用,因为人们可以通过Python访问系统,并且可以在互联网上做任何事情?这个问题可能表明我对沙箱主题是新手:-)@Tobias:这就是为什么我说你需要对虚拟机进行防火墙。如果你说当用户在我的网站上开始课程时,在服务器上生成独立的虚拟机在技术上是合理的,那么我将进一步调查,虽然这听起来很复杂。谢谢你的帮助@托拜厄斯,我只想指出,另一个选择(仅在某些情况下是免费的)可能是看看(什么力量的ideone)是否有用谢谢。如果课程所需的命令是可执行的,我会很高兴,但最重要的是(a)互联网访问被阻止,尽管系统必须与网站通信,以及(b)系统无法修改。@Tobias如果你在linux上,您可能只想尝试使用自定义SELinux策略运行CPython。从拒绝所有开始,您需要添加异常以允许(只读)访问文件系统中的库。正如您所提到的,您需要将网站和python进程分开,并通过管道进行通信