SecureClassLoader 的目的是什么?

What is a purpose of the SecureClassLoader?

我正在探索 Java 个类加载器,然后我遇到了 SecureClassLoader

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

谁能解释一下 SecureClassLoader 的用途?

为什么是"secure"?

谢谢。

来自http://www.securingjava.com/chapter-two/chapter-two-7.html

Secure Class Loaders allow classes to be loaded only from those directories specified in Java's java.app.class.path property. Secure Class Loaders can only be used by classes found in the java.security package and are extensively used by the Java 2 access control mechanisms.

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

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

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

通过以下两种方式之一向 classes 授予权限:

  1. 静态地,当 class 被定义时。
  2. 动态地,基于当前的安全策略(但前提是 class 被定义为具有动态策略)。

在这两种情况下,权限都是通过传递给 ClassLoader.defineClass 的 ProtectionDomain 授予的。 ProtectionDomain 有两部分:静态授予 class 的权限,以及 "code source"(classes 的加载位置,通常是 JAR 或目录)或 "code signers"(classes 保证来自特定来源)。如果class 加载程序创建一个允许动态安全策略的保护域。

SecureClassLoader 有一个实用程序 defineClass 方法,它接受一个 CodeSource,它为每个 CodeSource 维护一个延迟创建的 ProtectionDomain 的缓存(如果你想定义静态权限,允许你的 subclass 覆盖 getPermissions)这样您的 ClassLoader 只需记住 CodeSource 而不是 ProtectionDomain。实际上,大多数 ClassLoader 实现都有一个预定义的 class 路径,因此它们可以轻松地自己创建和存储 ProtectionDomain,因此 class 本身并不是特别有用。