在JVM中停止恶意线程

时间:2011-07-17 16:53:20

标签: java multithreading security jvm

我正在编写一个可能正在运行恶意代码的服务器。为了防止攻击者将线程抛入无限循环,我想强制执行一秒的执行时间限制。

InterruptedException可以在无限循环中捕获,从而允许攻击者保留对线程的控制。因此Thread.interrupt()不是可接受的解决方案。

我当前的实现防止恶意线程获取任何资源(包括锁),使用Thread.stop()终止执行,并恢复线程所做的任何更改。我的主要抱怨是它使用了弃用的Thread.stop()方法;我不喜欢使用已弃用的代码。

我想知道是否有更多行业认可的解决方案,而不是启动/杀死一个全新的JVM,这对我的目的来说会有太多的开销。

2 个答案:

答案 0 :(得分:5)

杀死线程的唯一方法是使用单独的进程并终止该进程。 Thread.stop()抛出一个可以捕获并忽略的ThreadDeath错误。即catch(Throwable t) {}

有关Thread.stop()实际执行Does Thread.stop() really stop a Thread?

的更多详细信息

答案 1 :(得分:2)

您无法保证线程可以停止,因为多个阻塞方法(如套接字)不响应interrupt()。

我建议使用非常严格的安全管理器,这样您就可以绝对确定恶意代码是沙箱。如果您需要确定,那么请考虑一个特殊的类加载器,它确保只进行有效的操作。