5

我目前正在对 java 的安全机制进行大量试验,以了解如何在沙箱中最好地执行不受信任的代码。您要防止的一件事是无限循环,这就是为什么理想情况下您希望在其自己的线程中运行不受信任的代码。现在,当然,恶意代码可以进行一些繁重的处理,从而导致线程挂起。要基本上摆脱这个线程,唯一的方法是使用 java 已弃用的 Thread.stop() 机制。这是有问题的主要原因是线程持有的所有锁都被释放,这可能导致对象损坏。

问题是:使用 Java 的 SecurityManager 和自定义类加载器,我可以跟踪例如可以加载哪些类以及可以访问哪些系统资源。有没有办法通知(并可能禁止)代码获取锁(例如,定义在当前线程进入同步块之前通知的回调)。

4

1 回答 1

4

如果您已经在使用自定义类加载器,则可以在加载每个类之前检查它的字节码,并检测它是否包含获取锁的指令(monitorenter)。

您还应该考虑使用 stop() 释放的锁只有在其他代码可能会锁定的共享对象上获取它们时才会出现问题。如果您可以避免在“邪恶”线程中访问此类对象,那么您就是安全的。

于 2013-06-06T21:40:30.910 回答