現在、ユーザーが外部から提供されたコードを実行するプログラムを作成中です(この場合は正当なものと仮定します)。多くの研究の後で、私はこれに関係するセキュリティの大半がSecurityManagerによって処理できることを発見しました。しかし、私はそれが長すぎると悪意を持っていると思われる場合、外部コードを殺す方法を見つけるのに苦労しています。例えば、外部のコードは次のように見えた場合:長すぎると信頼できないコードを停止する
while (true) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// Oh well, keep running
}
}
これは永遠に実行し続けるだろう、とThread.interrupt()
は、スレッドを停止するために何もしないだろう。問題を引き起こさない不正なスレッドを停止する別の方法はありますか?私が遭遇したのはThread.stop()
ですが、それに付随するすべての問題のオプションではないようです。そうでない場合は、このコードを実行してプログラムが引き続き直接インターフェイスと通信できるようにするための他のオプションがありますか?
この質問は意味をなさない。ユーザーが悪意のあるコードを実行する可能性がある場合、そのコードを試して殺すのに安全な間隔はありません。アプレットは理由のために死んだ。ここで本当に何をしたいですか? –
それを監視するはずのあなたの信頼できるコードと同じJVMで信頼できないコードを実行するのは危険な考えです。これが理由の1つですが、VMがOOMEでクラッシュするまでメモリを割り当てただけではどうなるか考えてみてください。 – biziclop