15

私はRobocodeエンジンの開発者です。Robocodeを多言語にしたいと思っていますが、Scalaはぴったりのようです。ここにScalaプラグインのプロトタイプがあります

問題: ユーザーは創造的なプログラマーであるため、さまざまな方法で戦いに勝つことを試みる可能性があります。また、ロボットはオンラインデータベースからダウンロードされ、誰でもアップロードできます。したがって、セキュリティのギャップは、ユーザーのコンピュータにセキュリティホールをもたらす可能性があります。Javaで書かれたロボットは、制限されたサンドボックスで実行されています。ほとんどすべてが禁止されています[ネットワーク、GUI、ディスク(制限付き)、スレッド(制限付き)、クラスローダー、リフレクション]。サンドボックスはブラウザアプレットに似ています。SecurityManager、ロボットごとのカスタムClassLoaderなどを使用します...

RobocodeでScalaランタイムをホストする方法は2つあります。

1)サンドボックス内にロボットと一緒にロードします。私たちにとってかなり安全な、好ましい解決策。ただし、ランタイムはリフレクションを使用するため、Scalaランタイムの機能が損なわれます。多分実行時にクラスを生成しますか?スレッドを使用して内部クリーンアップを実行しますか?JVM /内部へのアクセス?(言語能力を制限したくない)

2)Scalaランタイムを信頼できるコードとして使用し、ボックスの外で、JDKと同じレベルのセキュリティを使用します。(悪意のある)ロボットへの可視性。ScalaランタイムAPIは安全ですか?彼らが警備員を持っている方法はありますか?セーフモードはありますか?Scalaランタイムに、ロボット間の通信に悪用される可能性のあるシングルトンはありますか?スレッドをシミュレートできる同時性/スレッドプール/メッセージングは​​ありますか?(Scalaランタイムのセキュリティ監査はありますか?)

3)中間の何か、ランタイムインとアウトのいくつかのクラス。どのクラス/パッケージがロボットに表示される必要がありますか/これは単なるプライベート実装ですか?(これは将来の解決策のようです)

質問: 信頼できるスコープで実行する必要のあるランタイムの部分を他の部分から列挙して分離することは可能ですか?特定のパッケージとクラス?またはより良いアイデア?

安全な解決策につながる具体的な答えを探しています。ランダムな考えは歓迎されますが、授与されません。スカラメールグループで進行中の議論があります。具体的な答えはまだありません。

4

2 に答える 2

3

1 番が最善の策だと思いますが、それも動く目標です。メーリング リストで取り上げられたように、構造型はリフレクションを使用します。標準ライブラリで構造型が一般的だとは思いませんが、構造型がどこにあるかを追跡している人はいないと思います。

また、裏でリフレクションを使用する他の機能が存在する可能性も常にあります。たとえば、しばらくの間、2.8 ブランチでは一部の配列機能がリフレクションを使用していました。ベンチマーク後は変わったと思いますが、「あっ!リフレクションで解決してみます」というような問題が発生する可能性は常にあります。

Scala 標準ライブラリにはシングルトンがたくさんあります。それらのほとんどは不変ですが、アクター ライブラリの Scheduler オブジェクトは、本質的に実際のスケジューラのプロキシであるため、通信に悪用される可能性があることを知っています。これにより、独自のカスタム スケジューラをプラグインできます。

現時点では、Scala でカスタム クラス ローダーを使用する必要はなく、そのすべてのクラスは実行時ではなくコンパイル時に生成されるとは思いませんが、これもまた、おそらく移動中のターゲットです。Scala は多くのクラス ファイルを生成しますが、コンパイル時ではなく必要なときに実行時にクラス ファイルの一部を生成するという話は常にあります。

要するに、信頼できる (そしてすべきである) Scala の断片を列挙して分離することは (労力に対する合理的な制約の範囲内で) 可能ではないと思います。

于 2010-02-14T23:20:30.970 に答える
0

すべてがリフレクションを利用する可能性のある他のJ*言語の実装について述べたように、リフレクションがゲームの一部でない限り、これらすべての言語の禁止になります。リフレクションAPIのスコープを分割する方法がないのは、JVMの問題だと思います。そうすれば、コードのリフレクション可能な部分を「サンドボックス」することができます。

于 2010-02-25T13:45:19.363 に答える