1

私は現在、tryrubycodeacademyと同様の REPL プログラミング環境を提供する小さな Web アプリケーションを構築するプロジェクトの実行可能性を評価しており、サーバー側のソリューションに関して、ユーザーが送信したコードを安全に評価するための可能な解決策を検討しています。 JVM にはセキュリティ対策が組み込まれているため、最高のサンドボックス環境を提供することを読んだことがあります。

JavaTM Scripting APIについて読み、それを使用してrhino(javascript)、jruby、jython、Quercus(php) などのさまざまなスクリプト エンジン/インタープリターでコードを評価できることを知りました。単一のサーバーで JVM を実行して、複数の異なる言語でユーザー コードを評価することは可能でしょうか? これはまったく効率的でしょうか?そうでない場合、他にどのようなオプションがありますか?

4

1 に答える 1

1

単一のサーバーで JVM を実行して、複数の異なる言語でユーザー コードを評価することは可能でしょうか?

はい、実現可能です。

これはまったく効率的でしょうか?

効率が特に重要な理由はわかりません。リモート ユーザー向けの小さな例を実行するのに、効率は必要ないことに気が付きました。いずれにせよ、それは十分に効率的であるべきだというのが私の見解です。


ただし、ここでの本当の懸念は、この種のサービスがさまざまな種類の悪用を招くことです。

  • サンドボックスを壊そうとする人がいるかもしれません。適切に実装していない場合 (または、パッチが適用されていないセキュリティ上の欠陥を悪用できる場合) は成功し、システムの残りの部分に侵入する可能性があります。

  • 人々は、サービス拒否攻撃を開始する傾向がある可能性があります。セキュリティ サンドボックスで処理できないことはさまざまです。たとえば、大規模なデータ構造を作成して GC オーバーロードや OOME をトリガーしたり、多数のスレッドや無限ループを作成したりします。

  • または、上記のいくつかを誤って行う可能性があります。

提案しているようなサービスを実装する場合、これらに対処するための戦略が必要になります。


ファローアップ

効率に関するコメントに関して、私の考えでは、インタープリター全体をおそらく 1 行のコードのためにメモリーにロードするのは、最善の方法ではないのではないでしょうか?

JVM ベースの言語でサービスを実装する通常の方法は、同じ JVM インスタンスで複数の要求を実行することです。ここでそれを行うと、毎回インタープリターをロードすることはありません。再初期化するだけです。

しかし、いずれにせよ、効率の問題は後回しにしたほうがよいでしょう。

于 2013-08-24T05:15:35.057 に答える