より制限されたバージョンの Java を使用するゲーム内コード IDE を作成することを考えています。たとえば、I/O ストリーム API を使用したくありません。これは可能ですか?
また、 inb4 this . それはまだ能力を制限するのには役立ちません.愚かな/邪悪な学生だけです.XD.
より制限されたバージョンの Java を使用するゲーム内コード IDE を作成することを考えています。たとえば、I/O ストリーム API を使用したくありません。これは可能ですか?
また、 inb4 this . それはまだ能力を制限するのには役立ちません.愚かな/邪悪な学生だけです.XD.
コンパイラを制限することは1つの可能性ですが、おそらく最も簡単な方法ではありません。-bootclasspath
オプションを指定してコンパイラーを呼び出して、JREのrt.jarのスリム化バージョンを提供することができます。次に、禁止されているクラスを使用すると(または、実際には、制限されたjarファイルに含まれていないクラスを使用すると)コンパイラエラーが発生します。
ランタイムセキュリティマネージャーを使用し、学生のコードに制限付きのアクセス許可のみを与えることをお勧めします。生徒のクラスに実際に必要な権限のみを付与し(解決するタスクによってはほとんどない可能性があります)、標準APIのほとんどを使用しながら、悪意のあることを行うことはできません。外部システムとのインターフェースがない限り。
もちろん、これでも無限ループを防ぐことはできませんが、実際には不可能です。
java.policyをカスタマイズできます。ここで、Javaアプリケーションで使用できるクラスを設定できます。ポリシーに存在しないクラスを生徒が使用すると、セキュリティ例外がスローされます。
「使用しない」という意味によって少し異なります。その IDE 内に記述されたコードがストリーム API へのアクセスを許可されていない (IDE 自体ではない) 場合は、クラスまたはパッケージ全体へのアクセスを制限できる独自のクラスローダーをいつでも提供できます。