我正在尝试建立一个类似于Codecademy的教育编码网站,但坦率地说,我不知道应该采取哪些步骤。在 webapp 中包含一个简单的 python 解释器时,我是否可以指出正确的方向?
4 回答
一种选择可能是使用 PyPy 创建沙盒 python。这将限制某人可以进行的外部操作。
设置完成后,您的网站将获取代码源,通过 ajax 将其发送到您的网络服务器,然后服务器将在沙盒 python 实例的子进程中运行代码。如果它花费的时间超过 5 秒,您也可以终止该进程。然后将输出作为对客户端的响应返回。
有关 PyPy 沙箱的帮助,请参阅以下链接:http:
//doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html
创建一个完全交互式的 REPL 将更加复杂。您需要为服务器上的每个客户端保持一个解释器。然后接受输入的ajax“行”并通过与正在运行的进程通信通过interp运行它们,并返回输出。
总的来说,不是小事。你需要一些强大的开发技能才能轻松地做到这一点。如果您只是在学习,您可能会发现这项任务有点令人生畏。
在这里要做的事情比你想象的要多。
主要问题是您不能让人们在您的网络服务器上运行任意 Python 代码。例如,如果他们这样做会发生什么
import os
os.system("rm -rf *.*")
很明显,你必须安全地运行这个 Python 代码。但是你遇到了保护 Python 的问题,这基本上是不可能的,因为它是动态的。因此,您可能不得不在虚拟机中运行 Python shell,这也带来了一些麻烦。
最近的一个选项是使用repl。
这个选项很棒,因为编译器是使用 JavaScript 制作的,所以编译和执行是在用户端进行的,这意味着服务器没有漏洞。
他们有以下编译器:Python3、Python、Javascript、Java、Ruby、PHP ...
我强烈建议您查看他们的网站http://repl.it
查看 LXC 容器。他们有一个很酷的 api,你可以用它来创建轻量级的 linux 容器。您可以在该容器内运行子进程命令,这样最终用户就不会弄乱您的主服务器。