java.lang.Object
java.security.Permission
java.security.BasicPermission
java.lang.RuntimePermission
- 所有已实现的接口:
Serializable
,Guard
此类用于运行时权限。
RuntimePermission
包含名称(也称为“目标名称”)但没有操作列表;您要么拥有命名权限,要么没有。
目标名称是运行时权限的名称(见下文)。命名约定遵循分层属性命名约定。此外,星号可能会出现在名称的末尾,跟在“.”之后,或者单独出现,以表示通配符匹配。例如:“loadLibrary.*”和“*”表示通配符匹配,而“*loadLibrary”和“a*b”则不是。
下表列出了标准的 RuntimePermission
目标名称,并为每个提供了权限允许的内容的描述以及对授予代码权限的风险的讨论。
权限目标名称 | 权限允许什么 | 允许此权限的风险 |
---|---|---|
创建类加载器 | 创建类加载器 | 这是一个极其危险的授予权限。可以实例化它们自己的类加载器的恶意应用程序然后可以将它们自己的流氓类加载到系统中。类加载器可以将这些新加载的类放入任何保护域,从而自动授予类该域的权限。 |
getClassLoader | 检索类加载器(例如,调用类的类加载器) | 这将授予攻击者获取特定类的类加载器的权限。这是危险的,因为访问类的类加载器允许攻击者加载该类加载器可用的其他类。否则攻击者通常无法访问这些类。 |
setContextClassLoader | 线程使用的上下文类加载器的设置 | 当系统代码和扩展需要查找系统类加载器中可能不存在的资源时,会使用上下文类加载器。授予 setContextClassLoader 权限将允许代码更改用于特定线程(包括系统线程)的上下文类加载器。 |
enableContextClassLoaderOverride | 线程上下文类加载器方法的子类实现 | 当系统代码和扩展需要查找系统类加载器中可能不存在的资源时,会使用上下文类加载器。授予 enableContextClassLoaderOverride 权限将允许 Thread 的子类重写用于获取或设置特定线程的上下文类加载器的方法。 |
关闭类加载器 | 类加载器的关闭 | 授予此权限允许代码关闭它引用的任何 URLClassLoader。 |
setSecurityManager | 安全管理器的设置(可能替换现有的) | 安全管理器是一个允许应用程序实现安全策略的类。授予 setSecurityManager 权限将允许代码通过安装不同的、可能限制较少的安全管理器来更改使用哪个安全管理器,从而绕过原安全管理器执行的检查。 |
创建安全管理器 | 创建新的安全管理器 | 这使代码可以访问受保护的敏感方法,这些方法可能会泄露有关其他类或执行堆栈的信息。 |
getenv.{变量名} | 读取指定环境变量的值 | 这将允许代码读取特定环境变量的值或确定其是否存在。如果变量包含机密数据,这是很危险的。 |
exitVM.{退出状态} | 以指定的退出状态停止 Java 虚拟机 | 这允许攻击者通过自动强制虚拟机停止来发动拒绝服务攻击。注意:“exitVM.*”权限会自动授予从应用程序类路径加载的所有代码,从而使应用程序能够自行终止。此外,“exitVM”权限等同于“exitVM.*”。 |
shutdownHooks | 虚拟机关闭钩子的注册和注销 | 这允许攻击者注册一个恶意关闭挂钩,干扰虚拟机的干净关闭。 |
设置工厂 | ServerSocket 或 Socket 使用的套接字工厂的设置,或 URL 使用的流处理程序工厂的设置 | 这允许代码设置套接字、服务套接字、流处理程序或 RMI 套接字工厂的实际实现。攻击者可能会设置错误的实现来破坏数据流。 |
设置IO | System.out、System.in、System.err的设置 | 这允许更改标准系统流的值。攻击者可能会更改 System.in 以监视和窃取用户输入,或者可能会将 System.err 设置为“空”OutputStream,这将隐藏发送到 System.err 的任何错误消息。 |
修改线程 | 修改线程,例如,通过调用 Thread interrupt, setDaemon, setPriority, setName 和 setUncaughtExceptionHandler 方法 |
这允许攻击者修改系统中任何线程的行为。 |
修改线程组 | 修改线程组,例如,通过调用 ThreadGroup getParent 、setDaemon 和 setMaxPriority 方法 |
这允许攻击者创建线程组并设置它们的运行优先级。 |
getProtectionDomain | 检索类的 ProtectionDomain | 这允许代码获取特定代码源的策略信息。虽然获取策略信息不会危及系统的安全性,但它确实为攻击者提供了额外的信息,例如本地文件名,以便更好地进行攻击。 |
获取文件系统属性 | 检索文件系统属性 | 这允许代码获取文件系统信息,例如调用方可用的磁盘使用情况或磁盘空间。这具有潜在的危险,因为它会泄露有关系统硬件配置的信息以及有关调用者写入文件的权限的一些信息。 |
读取文件描述符 | 读取文件描述符 | 这将允许代码读取与读取的文件描述符关联的特定文件。如果文件包含机密数据,这是很危险的。 |
写文件描述符 | 写入文件描述符 | 这允许代码写入与描述符关联的特定文件。这很危险,因为它可能允许恶意代码植入病毒或至少填满整个磁盘。 |
loadLibrary.{库名} | 指定库的动态链接 | 允许 applet 加载本机代码库的权限是危险的,因为 Java 安全体系结构并非旨在也不会防止本机代码级别的恶意行为。 |
accessClassInPackage.{包名} | 当类加载器调用 SecurityManager checkPackageAccess 方法时,通过类加载器的 loadClass 方法访问指定包 |
这使代码可以访问它通常无权访问的包中的类。恶意代码可能会使用这些类来帮助其破坏系统的安全性。 |
defineClassInPackage.{包名} | 当类加载器调用 SecurityManager checkPackageDefinition 方法时,通过类加载器的 defineClass 方法定义指定包中的类。 |
这授予代码在特定包中定义类的权限。这很危险,因为具有此权限的恶意代码可能会在受信任的包中定义流氓类,例如 java.security 或 java.lang 。 |
defineClass | 使用 Lookup.defineClass 定义一个类。 |
这会授予具有适当特权 Lookup 对象权限的代码,以在与 Lookup 的查找类相同的包中定义类。 |
访问声明成员 | 访问类的已声明成员 | 这授予代码查询类的公共、受保护、默认(包)访问以及私有字段和/或方法的权限。尽管代码可以访问私有和受保护的字段和方法名称,但它无法访问私有/受保护的字段数据并且不能调用任何私有方法。然而,恶意代码可能会使用此信息来更好地瞄准攻击。此外,它可以调用类中的任何公共方法和/或访问公共字段。如果代码通常无法调用这些方法和/或访问字段,这可能是危险的,因为它无法将对象转换为具有这些方法和字段的类/接口。 |
队列打印作业 | 打印作业请求的启动 | 这可能会将敏感信息打印到打印机,或者只是浪费纸张。 |
getStackTrace | 检索另一个线程的堆栈跟踪信息。 | 这允许检索另一个线程的堆栈跟踪信息。这可能允许恶意代码监视线程的执行并发现应用程序中的漏洞。 |
获取 StackWalkerWithClassReference | 获取一个堆栈遍历器,它可以检索具有类引用的堆栈帧。 | 这允许从堆栈遍历中检索 Class 对象。这可能允许恶意代码在其自身上下文之外访问堆栈上的 Class 对象。 |
setDefaultUncaughtExceptionHandler | 设置线程由于未捕获的异常而突然终止时要使用的默认处理程序 | 这允许攻击者注册一个恶意的未捕获异常处理程序,该处理程序可能会干扰线程的终止 |
优先 | 表示访问 java.util.prefs.Preferences 实现用户或系统根所需的权限,这又允许在 Preferences 持久性后备存储中进行检索或更新操作。) | 如果运行代码的用户具有足够的操作系统权限来读/写该后备存储,则此权限允许用户读取或写入首选项后备存储。实际的后备存储可能驻留在传统的文件系统目录中或注册表中,具体取决于平台操作系统 |
管理流程 | 本机进程终止和有关进程的信息 ProcessHandle 。 |
允许代码识别和终止它没有创建的进程。 |
localeServiceProvider | 这个 RuntimePermission 需要被授予子类并实现 java.util.spi.LocaleServiceProvider 的类。在调用抽象基类构造函数期间检查权限。此权限确保对实现此安全敏感提供程序机制的类的信任。 |
有关详细信息,请参阅 java.util.spi.LocaleServiceProvider 。 |
记录器查找器 | 这个 RuntimePermission 需要被授予子类或调用 java.lang.System.LoggerFinder 方法的类。在调用抽象基类构造函数以及调用其公共方法时检查权限。此权限确保对向系统类提供记录器的类的信任。 |
有关详细信息,请参阅 java.lang.System.LoggerFinder 。 |
访问系统模块 | 访问运行时映像中的系统模块。 | 这授予访问运行时映像中 系统模块 中资源的权限。 |
inetAddressResolverProvider | 这个 RuntimePermission 需要被授予子类并实现 java.net.spi.InetAddressResolverProvider 的类。在调用抽象基类构造函数期间检查权限。此权限确保对提供 InetAddress 主机名和地址解析方法使用的解析器的类的信任。 |
有关详细信息,请参阅 InetAddressResolverProvider 。 |
- 实现注意事项:
- 实现可以定义额外的目标名称,但应使用命名约定(例如反向域名表示法)以避免名称冲突。
- 自从:
- 1.2
- 参见:
-
构造方法总结
构造方法构造方法描述RuntimePermission
(String name) 创建具有指定名称的新 RuntimePermission。RuntimePermission
(String name, String actions) 创建具有指定名称的新 RuntimePermission 对象。 -
方法总结
在类 java.security.BasicPermission 中声明的方法
equals, getActions, hashCode, implies, newPermissionCollection
在类 java.security.Permission 中声明的方法
checkGuard, getName, toString
-
构造方法详细信息
-
RuntimePermission
创建具有指定名称的新 RuntimePermission。名称是 RuntimePermission 的符号名称,例如“exit”、“setFactory”等。星号可能出现在名称的末尾,跟在“.”之后,或单独出现,以表示通配符匹配。- 参数:
name
- RuntimePermission 的名称。- 抛出:
NullPointerException
- 如果name
是null
。IllegalArgumentException
- 如果name
为空。
-
RuntimePermission
创建具有指定名称的新 RuntimePermission 对象。 name 是RuntimePermission 的符号名称,actions String 当前未使用,应为null。- 参数:
name
- RuntimePermission 的名称。actions
- 应该为空。- 抛出:
NullPointerException
- 如果name
是null
。IllegalArgumentException
- 如果name
为空。
-