我正在设计一个系统来加载,处理和支持Java应用程序中的插件。我觉得一个特点是在它可以被部署之前绝对至关重要的是能够建立一个安全的环境,在这个环境中插件被限制在允许的范围内。如何安全地实现Java插件安全性?
我不明白如何以编程方式使用政策文件但不运行在推出-Djava.security.manager参数。所以现在就结束了。
我的下一个想法是覆盖所有我的SecurityManager在谁可以执行他们自己的SecurityManager的子类,地点的限制关心的方法。
的问题,然后大作,只有这样,才能找出谁是问这个权限是通过线程ID检查。所以,我设计了一个系统,所有的插件线程都驻留在PluginThreads线程组中。
这工作......直到一切开始爆炸。问题在于一些被封锁的东西是由Sun的代码执行的内部操作。
所以即使是最基本的操作,如打开一个窗口,因为我的保安经理被拒绝访问Sun的代码会失败。这里使用我的Thread检查方法是没有问题的,因为Sun的代码是在PluginThreads组内执行的。
所以我需要知道的是:
1)是否有可能是一个办法,我可以找出其内的呼叫从使用当前线程到来的背景下?
2)有没有更好的方法来做到这一点,我不知道?
3)如果该方法涉及策略文件,那么如何将它们加载到代码中?
4)是否有你能想到的,以防止太阳内部的Java代码被封锁任何其他方法?
是的我注意到线程检查是一个糟糕的处理安全的方式。 AccessControlContext是否不会干扰Sun代码? – bgroenks
@ ghostsoldier23你的意思是“Java库代码不会导致所有acc检查失败?”?它全部拥有所有权限。一般来说,库代码至少需要权限作为使用它的应用程序。通常,这意味着该库具有所有权限,或者将其与应用程序的权限绑定在一起。 –
你是说AppContext是com.sun。*库的一部分吗? “禁止”,“你不能通过”图书馆? ; D – bgroenks