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

时间:2014-02-27 13:13:23

标签: python shell numpy pandas javascript

为了提供有关数据分析的交互式示例,我想嵌入一个交互式python shell。它不一定必须是真正的 Python shell。应为用户提供可在shell中执行的任务。这类似于现有的教程,例如,http://www.codecademy.org,但我想与这些解决方案不提供的库一起工作,据我所知。

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

  • 我找到了像http://www.repl.it这样的项目,但似乎很难包含像SciPy,NumPy和Pandas这样的必要库。此外,必须验证用户输入,我不确定这是否适用于我找到的那些shell。

  • 我可以通过Web应用程序将命令传递给我服务器上的Python安装,但是我害怕在外来的任意代码上使用eval()。 Python有安全模式吗?我找到了http://www.pypy.org。虽然它们提供了Python沙箱,但不幸的是,它们不支持我需要的库。

  • 或者,我想过只是嵌入一个“假shell”,我构建它来复制我想要解释的函数的行为。当然,这会导致更多的工作,因为我必须编写一个虚假的界面,但现在似乎是唯一的可能性。

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

2 个答案:

答案 0 :(得分:4)

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

相反,在新虚拟机上运行每个会话,正确锁定(防火墙,非特权用户),在经过一段时间限制后关闭。新会话将获得一个新的,干净的虚拟机。

这可以隔离任何可能运行并试图突破沙箱的恶意代码;一个好的虚拟机由处理器从主机操作系统硬件隔离,这是Python专用层永远无法实现的。

答案 1 :(得分:3)

此过程有时称为沙盒。 你可以找到一些good information on the python wiki

基本上有三种选择:

  • 机器级机制(如VM,如Martijn Pieters建议的那样)
  • 操作系统级机制(例如chrootSELinux
  • 自定义解释器,例如您提到的pypy(which has sandboxing capabilities)或Jython,您可以在其中使用Java安全管理器或applet机制。

您可能还想查看Restricted Python,这对于非常有限的环境特别有用,但安全性取决于其配置。

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

  • 文件系统访问?阻止一切,或允许某些目录?
  • 网络访问,例如套接字?
  • 任意系统调用?