Codecademyに似た教育用コーディングサイトを構築しようとしていますが、率直に言って、どのような手順を踏むべきか迷っています。単純なPythonインタープリターをWebアプリに含めることで、正しい方向を示すことができますか?
4 に答える
1つのオプションは、PyPyを使用してサンドボックス化されたPythonを作成することです。それは誰かが行うことができる外部操作を制限するでしょう。
これを設定すると、Webサイトはコードソースを取得し、それをajaxを介してWebサーバーに送信し、サーバーはサンドボックス化されたPythonインスタンスのサブプロセスでコードを実行します。また、たとえば5秒より長くかかった場合は、プロセスを強制終了できます。次に、クライアントへの応答として出力を返します。
PyPyサンドボックスのヘルプについては、次のリンクを参照してください:http:
//doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html
完全にインタラクティブなREPLを作成するには、さらに複雑になります。サーバー上の各クライアントに対してインタプリタを存続させる必要があります。次に、入力のajax「行」を受け入れ、実行中のプロセスと通信してinterpを介してそれらを実行し、出力を返します。
全体的に、些細なことではありません。これを快適に行うには、強力な開発スキルが必要です。学習しているだけの場合、このタスクは少し気が遠くなるかもしれません。
ここでは、思っている以上にやることがあります。
主な問題は、Webサーバーで任意のPythonコードを実行させることができないことです。たとえば、彼らがそうしたらどうなりますか
import os
os.system("rm -rf *.*")
したがって、明らかに、このPythonコードを安全に実行する必要があります。しかし、 Pythonを保護するという問題があります。これは、Pythonが非常に動的であるため、基本的に不可能です。そのため、Pythonシェルを仮想マシンで実行する必要がありますが、これには独自の問題が伴います。
たとえば、 http ://code.google.com/p/google-app-engine-samples/downloads/detail?name = shell_20091112.tar.gz&can = 2&q =を見たことがありますか?
このための最近のオプションの1つは、replを使用することです。
コンパイラはJavaScriptを使用して作成されているため、このオプションはすばらしいです。コンパイルと実行はユーザー側で行われるため、サーバーに脆弱性がありません。
Python3、Python、Javascript、Java、Ruby、PHPなどのコンパイラがあります...
http://repl.itで彼らのサイトをチェックすることを強くお勧めします
LXCコンテナを調べてください。彼らはあなたが軽量のLinuxコンテナを作成するために使用できるかなりクールなAPIを持っています。そのコンテナ内でサブプロセスコマンドを実行して、エンドユーザーがメインサーバーを混乱させないようにすることができます。