入力したコード(おそらくC / Java)をコンパイルし、テストを実行できるWebサービスを構築しようとしています。どんなデザインに従うべきですか?仕事をするためにサーバーにどのコンパイラを配置できますか?推奨事項?長所?短所?
4 に答える
Kattisは GCC と Sun Java コンパイラを使用して C/C++/Java をコンパイルします。もちろん、サポートするプラットフォームによって、使用できるコンパイラが決まります。サポートしたいすべての言語をコンパイルできるコンパイラを探すよりも、複数のコンパイラを使用する方が簡単だと思います。
おそらく最大の問題の 1 つは、提出されたコードがホストを乗っ取るのを防ぐことです。Java には、プログラムが使用できるクラスを制限するサポートが組み込まれていますが、C/C++ でのフォークやソケットの作成などをどのように防止するかはわかりません。
Go Playgroundのようなものが必要になるでしょう。
Java については、JavaCompilerを参照してください。
クライアント側でこれを行うことができるSSCCE Text Based Compilerと呼ばれる小さなツールをドキュメントとして提供します。JRE だけでなく、Java SDK が必要であることに注意してください。
長所:
- サーバー側のコンパイルとコードの実行はファンキーに聞こえます!
短所:
ずっと前に、私は自分のドメインの 1 つでコードをコンパイルする (ただし実行はしない) ツールも提供しました。特定のタイプのコードは、100 行未満のコードをコンパイルするのに 30 分以上を必要とする結び目で Sun コンパイラを拘束する可能性があることが判明しました! サービス拒否攻撃、誰か? 解決策を実装する時間がなかったので、ツールを撤回しました。
コードを実行するには、ほぼ確実に包括的なSecurityManagerを実装する必要があります。
最も簡単な方法は、ユーザーが独自の JSP ページをアップロードできる Web コンテナー (Tomcat や Jetty など) です。
これらは Web コンテナーによって自動的にコンパイルされ、要求されたときに実行されます。