我正在设计一个用于在 Java 应用程序中加载、处理和支持插件的系统。我认为在部署之前对此绝对至关重要的一个功能是能够建立一个安全的环境,在该环境中插件仅限于允许其执行的操作。
我无法理解如何以编程方式使用策略文件而不在启动时运行 -Djava.security.manager 参数。所以现在就这样了。
我的下一个想法是在我自己的 SecurityManager 子类中覆盖 SecurityManager 中我关心的所有方法,并对谁可以执行它们进行限制。
然后问题就出现了,找出谁在请求此权限的唯一方法是通过线程 ID 检查。因此,我设计了一个系统,所有插件线程都驻留在其中,并且只能驻留在 PluginThreads 线程组中。
这一直有效……直到一切开始爆炸。问题在于,一些被阻止的事情是由 Sun 的代码执行的内部操作。
因此,即使是最基本的操作(例如打开窗口)也会失败,因为我的安全经理拒绝访问 Sun 的代码。使用我的线程检查方法无法解决此问题,因为 Sun 的代码是在 PluginThreads 组中执行的。
所以我需要知道的是:
1)是否有可能有一种方法可以找出使用当前线程进行调用的上下文?
2)有没有更好的方法来做到这一点,我不知道?
3)如果该方法涉及策略文件,如何将它们加载到代码中?
4)您还能想到其他方法来防止Sun内部Java代码被阻塞吗?
The SecurityManager
真是一团糟。您应该考虑要求插件使用 Java 子集编写,这样您就可以合理地推断它们可以做什么,而不是迭代地授予更多可能被滥用的权限,直到它看起来起作用。
Joe-E http://code.google.com/p/joe-e/提供可分解的安全性。从http://lambda-the-ultimate.org/node/3830 http://lambda-the-ultimate.org/node/3830 :
我们推出 Joe-E,一种旨在支持安全软件系统开发的语言。 Joe-E 是 Java 的一个子集,可以更轻松地构建和实现具有强大安全属性的程序,这些安全属性可以在安全审查期间进行检查。它使程序员能够将最小特权原则应用于他们的程序;实施无法绕过的特定于应用程序的参考监视器;引入和使用特定于领域的安全抽象;安全地执行不受信任的代码并与之交互;并构建安全、可扩展的系统。 Joe-E 演示了如何实现对象能力语言的强大安全属性,同时保留主流面向对象语言的功能和感觉......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)