2016-06-13 85 views
3

我知道这是technically a duplicate question上执行Python代码,但我相信它是有效的,因为原来的问题是7年前提交的,因为那么Python/Web安全已经走过了很长的路要走。允许用户在服务器

我想建立一个Web应用程序,允许用户输入Python代码(通过编辑王牌包),然后在服务器上使用Python解释器在浏览器中执行它。我不能使用pypy.js,因为我需要使用numpy,pandas和matplotlib。本质上,我想创建自己的Codecademy(我是一名老师,并希望为我的学生创建Codecademy类课程)。令人遗憾的是,Codecademy在某个时候提到的创造性课程一直没有成功。

我使用的烧瓶中,但我可以学习Django的是否会更容易些。

什么是让我的用户,而不让他们影响程序或访问文件的其余部分他们被允许到什么外面跑了Python代码的最佳方式?

+0

那么,你的问题是什么?确保它不太宽! –

+1

即使您信任他人,也允许任何人执行代码都存在安全风险。我想像CodeAcademy在一个微型虚拟机(或类似的东西)中运行每个用户,这样他们就不会对主系统造成任何伤害。 –

+0

也许,如果您使用了从主机系统中分离出来的过程中,你并不需要一个VM的开销(我想这就是Rushy是指的是“那种东西”),即。码头工人而不是虚拟机,如果你不信任你的学生,最终会强制访问控制。 – jpic

回答

2

有使用Python或网络安全在过去7年没有根本性的变化。允许用户在服务器上运行代码仍然是自杀的。 但是,变化的是像docker这样的轻量级VM解决方案的可用性。 举个例子,这可以工作看看https://civisanalytics.com/blog/engineering/2014/08/14/Using-Docker-to-Run-Python/。我不会在这里引用这个解决方案,因为你会发现其他的例子,即使这个例子会消失。

然而,这可能是更安全的运行,然后你的服务器,

  • 用户代码仍然运行在服务器上的用户代码直接。它可能无法摆脱码头图像,但恶意用户仍然可以上传例如。拒绝服务工具并从您的服务器发起攻击。或者嗅探你的网络流量或其他。
  • 有或至少可能有办法打破码头形象。

对于像教室这些风险是可以接受的一个受控的环境中,但对于一个公共服务器,你将需要大量的安全懂得如何进一步锁定服务器和泊坞窗的图像和过滤器可蟒蛇功能。

+0

Docker看起来是一个很好的解决方案。现在这个计划只是在我大学的网络上运行它(所以学生们必须连接VPN以便在校园外访问它)。如果我将它转移到公共服务器上,我会尝试为实际的后端开发人员获得拨款资助......但这是一个假设,很遥远。 –