Module java.base
Package java.lang

Class RuntimePermission

所有已实现的接口:
Serializable, Guard

public final class RuntimePermission extends BasicPermission
这个类用于运行时权限。一个 RuntimePermission 包含一个名称(也称为“目标名称”),但没有操作列表;你要么有这个命名权限,要么没有。

目标名称是运行时权限的名称(见下文)。命名约定遵循分层属性命名约定。此外,星号可能出现在名称的末尾,跟在一个“.”后面,或者单独出现,表示通配符匹配。例如:“loadLibrary.*”和“*”表示通配符匹配,而“*loadLibrary”和“a*b”则不是。

以下表格列出了标准的 RuntimePermission 目标名称,对于每个目标名称,提供了权限允许的内容描述以及授予代码该权限的风险讨论。

权限目标名称,目标允许的内容以及相关风险
权限目标名称 权限允许的内容 允许此权限的风险
createClassLoader 创建类加载器 授予此权限是非常危险的。恶意应用程序可以实例化自己的类加载器,然后将其自己的恶意类加载到系统中。这些新加载的类可以被类加载器放置到任何保护域中,从而自动授予这些类该域的权限。
getClassLoader 获取类加载器(例如,调用类的类加载器) 这将授予攻击者获取特定类的类加载器的权限。这是危险的,因为访问类的类加载器允许攻击者加载该类加载器可用的其他类。攻击者通常无法访问这些类。
setContextClassLoader 设置线程使用的上下文类加载器 当系统代码和扩展需要查找系统类加载器中可能不存在的资源时,会使用上下文类加载器。授予setContextClassLoader权限将允许代码更改为特定线程使用的上下文类加载器,包括系统线程。
enableContextClassLoaderOverride 子类实现线程上下文类加载器方法 当系统代码和扩展需要查找系统类加载器中可能不存在的资源时,会使用上下文类加载器。授予enableContextClassLoaderOverride权限将允许Thread的子类覆盖用于获取或设置特定线程的上下文类加载器的方法。
closeClassLoader 关闭ClassLoader 授予此权限允许代码关闭其引用的任何URLClassLoader。
setSecurityManager 设置安全管理器(可能替换现有的安全管理器) 安全管理器是一个允许应用程序实现安全策略的类。授予setSecurityManager权限将允许代码更改使用不同的安全管理器,可能是更不严格的安全管理器,从而绕过原始安全管理器执行的检查。
createSecurityManager 创建新的安全管理器 这使代码可以访问可能披露有关其他类或执行堆栈的信息的受保护敏感方法。
getenv.{variable name} 读取指定环境变量的值 这将允许代码读取特定环境变量的值,或确定该变量是否存在。如果变量包含机密数据,则这是危险的。
exitVM.{exit status} 使用指定的退出状态停止Java虚拟机 这允许攻击者通过强制虚拟机停止来发动拒绝服务攻击。注意:"exitVM.*"权限自动授予从应用程序类路径加载的所有代码,从而使应用程序能够终止自身。此外,"exitVM"权限等同于"exitVM.*"。
shutdownHooks 注册和取消虚拟机关闭挂钩 这允许攻击者注册干扰虚拟机干净关闭的恶意关闭挂钩。
setFactory 设置ServerSocket或Socket使用的套接字工厂,或URL使用的流处理程序工厂 这允许代码设置套接字、服务器套接字、流处理程序或RMI套接字工厂的实际实现。攻击者可能设置一个错误的实现,损坏数据流。
setIO 设置System.out、System.in和System.err 这允许更改标准系统流的值。攻击者可能将System.in更改为监视和窃取用户输入,或者将System.err设置为"null" OutputStream,这将隐藏发送到System.err的任何错误消息。
modifyThread 修改线程,例如通过调用Thread的interrupt, setDaemon, setPriority, setNamesetUncaughtExceptionHandler方法 这允许攻击者修改系统中任何线程的行为。
modifyThreadGroup 修改线程组,例如通过调用ThreadGroup的getParentsetDaemonsetMaxPriority方法 这允许攻击者创建线程组并设置其运行优先级。
getProtectionDomain 检索类的ProtectionDomain 这允许代码获取特定代码源的策略信息。虽然获取策略信息不会危及系统的安全性,但它会为攻击者提供额外的信息,例如本地文件名,以更好地瞄准攻击。
getFileSystemAttributes 检索文件系统属性 这允许代码获取文件系统信息,例如磁盘使用情况或调用者可用的磁盘空间。这可能是危险的,因为它会披露有关系统硬件配置的信息以及有关调用者写入文件的特权的一些信息。
readFileDescriptor 读取文件描述符 这将允许代码读取与读取的文件描述符相关联的特定文件。如果文件包含机密数据,则这是危险的。
writeFileDescriptor 写入文件描述符 这允许代码写入与描述符相关联的特定文件。这是危险的,因为恶意代码可能会植入病毒,或者至少填满整个磁盘。
loadLibrary.{library name} 动态链接指定库 允许小程序加载本地代码库是危险的,因为Java安全架构未设计和不会阻止本地代码层面的恶意行为。
accessClassInPackage.{package name} 通过类加载器的loadClass方法访问指定包中的类时,当该类加载器调用SecurityManager的checkPackageAccess方法时 这使代码可以访问通常无法访问的包中的类。恶意代码可能会使用这些类来帮助其试图破坏系统安全性。
defineClassInPackage.{package name} 通过类加载器的defineClass方法在指定包中定义类时,当该类加载器调用SecurityManager的checkPackageDefinition方法时 这授予代码在特定包中定义类的权限。这是危险的,因为具有此权限的恶意代码可能会在受信任包(例如java.securityjava.lang)中定义恶意类。
defineClass 使用Lookup.defineClass(byte%5B%5D)定义类。 这授予具有适当特权的Lookup对象权限,在与Lookup的查找类相同的包中定义类。
accessDeclaredMembers 访问类的声明成员 这授予代码查询类的公共、受保护、默认(包)访问和私有字段和/或方法的权限。尽管代码可以访问私有和受保护字段和方法名称,但它无法访问私有/受保护字段数据,也无法调用任何私有方法。尽管如此,恶意代码可能会使用此信息更好地瞄准攻击。此外,它可能调用类中的任何公共方法和/或访问公共字段。如果代码通常无法调用这些方法和/或访问字段,因为它无法将对象转换为具有这些方法和字段的类/接口,则这可能是危险的。
queuePrintJob 发起打印作业请求 这可能会将敏感信息打印到打印机,或者只是浪费纸张。
getStackTrace 检索另一个线程的堆栈跟踪信息。 这允许检索另一个线程的堆栈跟踪信息。这可能允许恶意代码监视线程的执行并发现应用程序中的漏洞。
getStackWalkerWithClassReference 获取可以检索带有类引用的堆栈帧的堆栈行走器。 这允许从堆栈行走中检索Class对象。这可能允许恶意代码在其上下文之外访问堆栈上的Class对象。
setDefaultUncaughtExceptionHandler 设置线程由于未捕获异常而突然终止时使用的默认处理程序 这允许攻击者注册一个可能干扰线程终止的恶意未捕获异常处理程序
preferences 表示需要访问java.util.prefs.Preferences实现用户或系统根的权限,从而允许在Preferences持久性后备存储中进行检索或更新操作。 如果运行代码的用户具有足够的OS特权来读取/写入该后备存储,此权限允许用户从或向首选项后备存储读取或写入。实际的后备存储可能位于传统文件系统目录中或注册表中,具体取决于平台OS
manageProcess 本机进程终止和有关进程的信息ProcessHandle. 允许代码识别和终止它没有创建的进程。
localeServiceProvider 必须授予此RuntimePermission给子类和实现java.util.spi.LocaleServiceProvider的类。在调用抽象基类构造函数期间检查权限。此权限确保信任实现此安全敏感提供程序机制的类。 有关更多信息,请参见 java.util.spi.LocaleServiceProvider
loggerFinder 必须授予此RuntimePermission给子类或调用java.lang.System.LoggerFinder上的方法的类。在调用抽象基类构造函数以及其公共方法时检查权限。此权限确保信任为系统类提供记录器的类。 有关更多信息,请参见java.lang.System.LoggerFinder
accessSystemModules 访问运行时镜像中的系统模块。 授予访问运行时镜像中系统模块资源的权限。
inetAddressResolverProvider 必须授予此RuntimePermission给那些子类和实现java.net.spi.InetAddressResolverProvider的类。在调用抽象基类构造函数时会检查权限。此权限确保信任提供InetAddress主机名和地址解析方法所使用的解析器的类。 更多信息请参见InetAddressResolverProvider
实现说明:
实现可以定义额外的目标名称,但应使用命名约定,如反向域名表示法,以避免名称冲突。
自版本:
1.2
参见:
  • Constructor Details

    • RuntimePermission

      public RuntimePermission(String name)
      创建具有指定名称的新RuntimePermission。名称是RuntimePermission的符号名称,例如"exit","setFactory"等。名称的末尾可以出现星号,跟随一个".",或者单独出现,表示通配符匹配。
      参数:
      name - RuntimePermission的名称。
      抛出:
      NullPointerException - 如果namenull
      IllegalArgumentException - 如果name为空。
    • RuntimePermission

      public RuntimePermission(String name, String actions)
      创建具有指定名称的新RuntimePermission对象。名称是RuntimePermission的符号名称,actions字符串当前未使用,应为null。
      参数:
      name - RuntimePermission的名称。
      actions - 应为null。
      抛出:
      NullPointerException - 如果namenull
      IllegalArgumentException - 如果name为空。