SecureClassLoader的目的是什么?

时间:2017-03-10 13:58:46

标签: java classloader

我正在探索Java类加载器然后我面对SecureClassLoader

在审查其源代码并阅读一些文章后,我意识到我无法理解它的安全功能和使用范围。

有人可以解释SecureClassLoader的用途吗?

为什么它“安全”?

谢谢。

2 个答案:

答案 0 :(得分:3)

Java安全模型基于具有特定权限的类。

当某些方法尝试执行特权操作(例如,在文件系统上打开文件或打开网络套接字)时,将检查调用堆栈上的每个类以确定它是否具有适当的权限。

权限以两种方式之一授予类:

  1. 静态地,定义了类。
  2. 动态地,基于当前的安全策略(但仅当该类被定义为具有动态策略时)。
  3. 在这两种情况下,都通过传递给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访问控制机制广泛使用。

所以它是安全的,因为它不能从任何来源加载类,而只能从受限制的目录加载。