我目前正在大量试验java的安全机制,以便理解如何最好地在沙箱中执行不受信任的代码。您要防止的事情之一是无限循环,这就是为什么在理想情况下,您希望在其自己的线程中运行不受信任的代码。当然,现在恶意代码可能会进行一些繁重的处理,从而导致线程挂起。要从根本上摆脱这个线程,唯一的方法就是使用java的过时的Thread.stop()机制。这有问题的主要原因是线程持有的所有锁都被释放了,这可能会导致对象损坏。
问题是:使用Java的SecurityManager和自定义类加载器,我能够跟踪,例如,哪些类可以加载,哪些系统资源可以访问。是否有办法通知(并可能禁止)代码获取锁(例如,定义在当前线程进入同步块之前被通知的回调)。
发布于 2013-06-07 05:40:31
如果你已经在使用一个定制的类加载器,你可以在加载之前检查每个类的字节码,并检测它是否包含一个获取锁的指令(监视器)。
您还应该考虑到,使用stop()释放的锁只有在其他代码可能锁定的共享对象上获得时才会有问题。如果你能避免在“邪恶”线程中访问这样的对象,你就是安全的。
https://stackoverflow.com/questions/16958335
复制相似问题