我正在探索Java类加载器然后我面对SecureClassLoader
。
在审查其源代码并阅读一些文章后,我意识到我无法理解它的安全功能和使用范围。
有人可以解释SecureClassLoader
的用途吗?
为什么它“安全”?
谢谢。
答案 0 :(得分:3)
Java安全模型基于具有特定权限的类。
当某些方法尝试执行特权操作(例如,在文件系统上打开文件或打开网络套接字)时,将检查调用堆栈上的每个类以确定它是否具有适当的权限。
权限以两种方式之一授予类:
在这两种情况下,都通过传递给ClassLoader.defineClass的ProtectionDomain授予权限。 ProtectionDomain有两部分:静态授予该类的权限,以及“代码源”(从中加载类的位置,通常是JAR或目录)或“代码签名者”(保证来自的类)具体来源)。代码源(或签名者)与当前安全策略动态匹配,以确定是否应授予其他权限(例如,“从此特定JAR加载的类可以从此特定目录读取文件),如果类加载器创建保护域这允许动态安全策略。
SecureClassLoader有一个带有CodeSource的实用程序defineClass方法,它为每个CodeSource维护一个懒惰创建的ProtectionDomain缓存(如果你想定义静态权限,允许你的子类重写getPermissions),这样你的ClassLoader只需要记住CodeSource而不是ProtectionDomain。实际上,大多数ClassLoader实现都有一个预定义的类路径,因此它们可以自己轻松地创建和存储ProtectionDomain,因此类本身并不是特别有用。
答案 1 :(得分:1)
来自http://www.securingjava.com/chapter-two/chapter-two-7.html:
Secure Class Loaders只允许从Java的java.app.class.path属性中指定的那些目录加载类。安全类加载器只能由java.security包中的类使用,并且被Java 2访问控制机制广泛使用。
所以它是安全的,因为它不能从任何来源加载类,而只能从受限制的目录加载。