Java:监控Locks的收购

Arn*_*ach 5 java sandbox securitymanager

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

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

Ale*_*lla 4

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

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