ファイル システム、ネットワーク、またはその他の IO に、非常に制限された独自の API を介してアクセスすることを除いて、人々がサーバー上で単純なコンソール Java プログラムを実行できるようにしたいとします。しかし、オペレーティング システム レベルの制限に深く入り込みたくないので、現在の議論のために、コード レベルのサニタイズ方法を検討したいと思います。
したがって、次のようにこの制限を達成しようとするとします。明示的にホワイトリストに登録されているものを除いて、すべての "import" ステートメントを禁止します (たとえば、"import SanitizedSystemIO. " は許可されていますが、"import java.io. " は許可されていません)。したがって、ユーザーは SanitizedSystemIO の File クラスを参照するコードを記述できますが、java.io.File を参照することはできません。このようにして、ユーザーはサニタイズされたラッパー API を使用することを余儀なくされますが、独自のフレームワーク コード (IO 機能を提供するために、ユーザーのコードと一緒にコンパイルおよび実行される) はすべての通常の Java API にアクセスできます。
このアプローチは機能しますか? または、標準のJava APIにアクセスするためにハッキングする方法はありますか?
ETA: わかりました。まず第一に、これはもちろん system.* ではなく java.* 文字列でなければなりません。基本的にC#だと思います...
第二に、「セキュリティマネージャーを使用する」または「クラスローダーを使用する」というアプローチがあると人々は言います。しかし、コード分析アプローチのどこが悪いのでしょうか? KISS の利点の 1 つは、KISS の単純さです。SecurityManager でチェックしてサニタイズするすべてのものを把握する代わりに、機能の小さなホワイトリストを許可し、他のすべてをブロックするだけです。実装に関しては、これは Java の知識がほとんどない人にとっては些細な作業です。
元の質問を繰り返しますが、これはハッキングできますか? このようなコード制限にもかかわらず、基になる API へのアクセスを許可する Java 言語構造はありますか?