Java-API简析_java.lang.RuntimePermission类(基于 Latest JDK)(浅析源码)

2023-11-09

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/132571263
出自【进步*于辰的博客

因为我发现目前,我对Java-API的学习意识比较薄弱,需要慢慢习惯使用Java-API,乃至剖析源码来提升自己的源码阅读能力和编码素质。
大家如果需要Java-API文档,我上传了【https://download.csdn.net/download/m0_69908381/87691693】。

1、概述

继承关系:

  • java.lang.Object
    • java.security.Permission
      • java.security.BasicPermission
        • java.lang.RuntimePermission

所有已实现的接口:
SerializableGuard


public final class RuntimePermission extends BasicPermission

该类用于运行时权限。RuntimePermission 包含一个名称(=也称为“目标名称”),但不包含操作列表;您可以有或没有指定的权限。

目标名称是运行时权限的名称(参见下面内容)。命名约定遵守分层属性命名约定。另外,名称的末尾可能出现一个星号,星号前有一个“.”(也可能只有一个星号),用来表示通配符。例如:“loadLibrary.*”或“*”是有效的,而“*loadLibrary”或“a*b”则是无效的。

下表列出了所有可能的 RuntimePermission 目标名称,并描述了每个名称允许使用何种权限,还讨论了为代码授予该权限的风险。

编号 权限目标名称 权限允许做什么 允许使用该权限的风险
1 createClassLoader 创建类加载器 授予该权限极其危险。能够实例化自己的类加载器的恶意应用程序可能会在系统中装载自己的恶意类。这些新加载的类可能被类加载器置于任意保护域中,从而自动将该域的权限授予这些类。
2 getClassLoader 类加载器的检索(即调用类的类加载器) 这将授予攻击者得到具体类的加载器的权限。这很危险,由于攻击者能够访问类的类加载器,所以攻击者能够加载其他可用于该类加载器的类。通常攻击者不具备这些类的访问权限。
3 setContextClassLoader 线程使用的上下文类加载器的设置 在需要查找可能不存在于系统类加载器中的资源时,系统代码和扩展部分会使用上下文类加载器。授予 setContextClassLoader 权限将允许代码改变特定线程(包括系统线程)使用的上下文类加载器。
4 enableContextClassLoaderOverride 线程上下文类加载器方法的子类实现 在需要查找可能不存在于系统类加载器中的资源时,系统代码和扩展部分会使用上下文类加载器。授予 enableContextClassLoaderOverride 权限将允许线程的子类重写某些方法,这些方法用于得到或设置特定线程的上下文类加载器。
5 setSecurityManager 设置安全管理器(可能会替换现有的) 安全管理器是允许应用程序实现安全策略的类。授予 setSecurityManager 权限将通过安装一个不同的、可能限制更少的安全管理器,来允许代码改变所用的安全管理器,因此可跳过原有安全管理器所强制执行的某些检查。
6 createSecurityManager 创建新的安全管理器 授予代码对受保护的、敏感方法的访问权,可能会泄露有关其他类或执行堆栈的信息。
7 getenv.{variable name} 读取指定环境变量的值 此权限允许代码读取特定环境变量的值或确定它是否存在。如果该变量含有机密数据,则这项授权是很危险的。
8 exitVM 暂停 Java 虚拟机 此权限允许攻击者通过自动强制暂停虚拟机来发起一次拒绝服务攻击。注意:自动为那些从应用程序类路径加载的全部代码授予 “exitVM” 权限,从而使这些应用程序能够自行中止。
9 shutdownHooks 虚拟机关闭挂钩的注册与取消 此权限允许攻击者注册一个妨碍虚拟机正常关闭的恶意关闭挂钩。
10 setFactory 设置由 ServerSocket 或 Socket 使用的套接字工厂,或 URL 使用的流处理程序工厂 此权限允许代码设置套接字、服务器套接字、流处理程序或 RMI 套接字工厂的实际实现。攻击者可能设置错误的实现,从而破坏数据流。
11 setIO System.outSystem.inSystem.err 的设置 此权限允许改变标准系统流的值。攻击者可以改变 System.in 来监视和窃取用户输入,或将 System.err 设置为 “null” OutputStream,从而隐藏发送到 System.err 的所有错误信息。
12 modifyThread 修改线程,例如通过调用线程的 interrupt()stop()suspend()resume()setDaemon()setPriority()setName()setUncaughtExceptionHandler() 方法 此权限允许攻击者修改系统中任意线程的行为。
13 stopThread 通过调用线程的 stop 方法停止线程 如果系统已授予代码访问该线程的权限,则此权限允许代码停止系统中的任何线程。此权限会造成一定的危险,因为该代码可能通过中止现有的线程来破坏系统。
14 modifyThreadGroup 修改线程组,例如通过调用 ThreadGroup 的 destroy()getParent()resume()setDaemon()setMaxPriority()stop()suspend() 方法 此权限允许攻击者创建线程组并设置它们的运行优先级。
15 getProtectionDomain 检索类的 ProtectionDomain 此权限允许代码获得特定代码源的安全策略信息。虽然获得安全策略信息并不足以危及系统安全,但这确实会给攻击者提供了能够更好地定位攻击目标的其他信息,例如本地文件名称等。
16 readFileDescriptor 读取文件描述符 此权限允许代码读取与文件描述符读取相关的特定文件。如果该文件包含机密数据,则此操作非常危险。
17 writeFileDescriptor 写入文件描述符 此权限允许代码写入与描述符相关的特定文件。此权限很危险,因为它可能允许恶意代码传播病毒,或者至少也会填满整个磁盘。
18 loadLibrary.{库名} 动态链接指定的库 允许 applet 具有加载本机代码库的权限是危险的,因为 Java 安全架构并未设计成可以防止恶意行为,并且也无法在本机代码的级别上防止恶意行为。
19 accessClassInPackage.{包名} 当类加载器调用 SecurityManager 的checkPackageAccess() 方法时,通过类加载器的 loadClass() 方法访问指定的包 此权限允许代码访问它们通常无法访问的那些包中的类。恶意代码可能利用这些类帮助它们实现破坏系统安全的企图。
20 defineClassInPackage.{包名} 当类加载器调用 SecurityManager 的 checkPackageDefinition() 方法时,通过类加载器的 defineClass() 方法定义指定的包中的类。 此权限允许代码在特定包中定义类。这样做很危险,因为具有此权限的恶意代码可能在受信任的包中定义恶意类,比如 java.securityjava.lang
21 accessDeclaredMembers 访问类的已声明成员 此权限允许代码查询类的公共、受保护、默认(包)访问和私有的字段和/或方法。尽管代码可以访问私有和受保护字段和方法名称,但它不能访问私有/受保护字段数据并且不能调用任何私有方法。此外,恶意代码可能使用该信息来更好地定位攻击目标。而且,它可以调用类中的任意公共方法和/或访问公共字段。如果代码不能用这些方法和字段将对象强制转换为类/接口,那么它通常无法调用这些方法和/或访问该字段,而这可能很危险。
22 queuePrintJob 打印作业请求的开始 这可能向打印机输出敏感信息,或者只是浪费纸张。
23 getStackTrace 检索另一个线程的堆栈追踪信息。 此权限允许检索另一个线程的堆栈追踪信息。此操作可能允许执行恶意代码监视线程并发现应用程序中的弱点。
24 setDefaultUncaughtExceptionHandler 在线程由于未捕获的异常而突然终止时,设置将要使用的默认处理程序 此权限允许攻击者注册恶意的未捕获异常处理程序,可能会妨碍线程的终止
25 Preferences 表示得到 java.util.prefs.Preferences 的访问权所需的权限。java.util.prefs.Preferences 实现了用户或系统的根,这反过来又允许检索或更新 Preferences 持久内部存储中的操作。 如果运行此代码的用户具有足够的读/写内部存储的 OS 特权,则此权限就允许用户读/写优先级内部存储。实际的内部存储可能位于传统的文件系统目录中或注册表中,这取决于平台 OS。

另请参见:
BasicPermissionPermissionPermissionsPermissionCollectionSecurityManager序列化表格

2、构造方法摘要

2.1 String name

用指定的名称创建新的 RuntimePermission。
说明:
先看源码。
在这里插入图片描述
底层仅调用了其父类的相应构造方法,此类的父类是 BasicPermission,后续解析。

2.2 String name, String actions

用指定的名称创建新的 RuntimePermission 对象。
说明:
先看源码。
在这里插入图片描述
同上。


本文持续更新中。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java-API简析_java.lang.RuntimePermission类(基于 Latest JDK)(浅析源码) 的相关文章

  • 经纬度绘图_Python气象绘图教程(七)——Cartopy

    Python地理信息库包 Cartopy 一 简介 在前面的教程中 我们已经讲解了常用的二维型数据的可视化方法 但是在日常研究中 由于大气科学属于地学系统 和地球地理信息的结合十分密切 大多数时间 需要在图形中添加地理信息 作为胶水语言 在
  • 第九章 numpy之线性代数+练习题

    线性代数 Numpy 定义了 matrix 类型 使用该 matrix 类型创建的是矩阵对象 它们的加减乘除运算缺省采用矩阵方式计算 因此用法和Matlab十分类似 但是由于 NumPy 中同时存在 ndarray 和 matrix 对象
  • 大数据系统及分析

    IDC将大数据技术定义为 为更经济地从高频率的 大容量的 不同结构和类型的数据中获取价值而设计的新一代架构和技术 大数据的关键在于种类繁多 数量庞大 使用传统的数据分析工具无法在可容忍的时间内处理相应的数据 大数据分析主要涉及两个不同的领域
  • 单片机原理及应用复习

    关于这个复习的资源 或者网址 点击 第一章 单片机的基础知识 1 什么是单片机 特点 将通用微型计算机基本功能部件集成在一块芯片上构成的一种专用微计算机系统 嵌入式系统 用于解决小型被控对象的智能化问题 SCM或MCU 组成 特点 体积小
  • 工作中遇到的关于配置问题

    工作中遇到的问题 想记录一下 一个程序员小白每天遇到的问题 1 创建了一个Maven的web工程 但是启动一直是404 原服务器未能找到目标资源 解决办法 选择deployment 点击加号选择war格式就OK啦 目录里面无法创建类 解决办
  • postman批量请求post

    1 首先建立一个collection文件夹 2 建立一个post请求 3 建立一个csv文件 用excel转换过来 由于最后一行老是有换行符 r 所以加一行数据 执行错了
  • Linux01 一 Shell与命令执行

    Shell 是在操作系统内核的基础上编写的程序 也是一种脚本语言 Shell 为用户提供了操作界面 让用户高效安全地访问 Linux 内核 执行命令 command options parameter1 parameter2 command
  • phpstorm 配置 支持golang编辑

    https blog csdn net miao0916 article details 55045235
  • MarkDown学习笔记 【第1课:2月13日_随便学点小招数】

    今天在家跟儿子学习如何使用Markdown 很有意思的软件 立马觉得要小小得瑟一下 呵呵 MarkDown学习笔记 第1课 2月13日 随便学点小招数 lt 1 标题 gt 标题采用 空格 可标识1 6级 分别是 Tips 空格很重要 lt
  • 【C++】STL常用算法

    这篇博客主要用来记录学习到的STL中的常用算法和它们的使用方法 目录 遍历算法 1 for each 2 transform 查找算法 1 find 2 find if 3 adjancent find 4 binary search 5
  • Leetcode——给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。(java语言)

    题目 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍 示例 给定 nums 2 7 11 1
  • Antd Design Vue中 修改table表格鼠标移入的行样式

    Antd Design Vue中 修改table表格鼠标移入的行样式 a table的父级盒子选择器 gt gt gt ant table tbody gt tr hover not ant table expanded row gt td
  • 基于SSM的北京集联软件科技有限公司信息管理系统

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端 采用JSP技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是否Mave

随机推荐

  • SpringCloud五大核心组件

    Consul 等 提供了搭建分布式系统及微服务常用的工具 如配置管理 服务发现 断路器 智能路由 微代理 控制总线 一次性token 全局锁 选主 分布式会话和集群状态等 满足了构建微服务所需的所有解决方案 服务发现 Netflix Eur
  • tensorflow损失函数及实现

    在深度学习中 损失函数是 来衡量模型参数的质量的函数 衡量的 式是 较 络输出和真实输出的差异 损失函数在不同的 献中名称是不 样 的 主要有以下 种命名 式 1 分类任务 在深度学习的分类任务中使 最多的是交叉熵损失函数 所以在这 我们
  • cnpm 安装

    使用淘宝镜像cnpm替代npm 解决npm安装库慢 使用代理或者库镜像又比较麻烦 最好使用cnpm 1 cdm打开命令提示符 输入 npm install g cnpm registry https registry npm taobao
  • win11安装MySQL5.7.43的问题清单

    文章目录 1 win11查看自己电脑有没有安装mysql 法1 法2 2 完全清除之前安装的mysql 3 mysql的安装 法1 法2 4 遇到的一些问题 1 mysql 不是内部或外部命令 也不是可运行的程序或批处理文件 2 忘记mys
  • UMG创建暂停官方问题修正

    链接来自 https docs unrealengine com zh CN Engine UMG HowTo CreatePauseMenu index html 仍然有几个问题 和创建主菜单类似 就不一一解释了 1 暂停菜单 2 人物蓝
  • Java的API帮助文档

    JDK帮助文档 SUN公司为JDK工具包提供了一整套文档资料 我们习惯上称之为JDK文档 JDK文档中提供了Java中的各种技术的详细资料 以及JDK中提供的各种类的帮助说明 JDk文档是Java语言的完整说明 大多数书籍中的类的介绍都要参
  • 什么是真正的实时操作系统

    转自 http club topsage com thread 513248 1 1 html 1 首先说一下实时的定义及要求 参见 Donal Gillies 在 Realtime Computing FAQ 中提出定义 实时系统指系统的
  • [Atcoder ABC222] F - Expensive Expense

    Time Limit 4 sec Memory Limit 1024 MB Score 500 points Problem Statement The Kingdom of AtCoder is composed of N N N tow
  • python+Django的web开发实例

    一 创建一个项目 如果这是你第一次使用Django 那么你必须进行一些初始设置 也就是通过自动生成代码来建立一个Django项目 一个Django项目的设置集 包含了数据库配置 Django详细选项设置和应用 特性配置 具体操作步骤如下所示
  • TaiShan 200服务器安装Ubuntu 18.04

    TaiShan 200服务器安装Ubuntu 18 04 0 镜像下载 1 准备工作 1 1 软件硬件环境准备 1 2 组网规划 1 3 磁盘分区规划 1 4 可选 RAID配置 2 通过光驱安装Ubuntu 18 04 0 镜像下载 ub
  • 峰值电流模式Buck控制器

    图1 7 1峰值电流模式Buck Converter方块图 图1 7 1包含两个回路 分别是外回路 电压控制回路 和内回路 电感电流控制回路 外回路 电压控制回路 此回路类似与输出电压控制模式类似 Vcomp为输出电压与基准电压通过比较器而
  • Android Studio 中使用uiautomatorviewer插件

    1 综述 Android Studio是Google官方提供的一款用于开发Android应用程序的集成开发环境 IDE 它基于IntelliJ IDEA开发而来 为开发者提供了完整的工具链 包括代码编写 调试 测试 性能优化等 Androi
  • C++实现MySQL数据库连接池

    C 实现MySQL数据库连接池 涉及技术 MySQL数据库编程 单例模式 STL容器 C 11多线程 线程互斥 线程互斥 线程同步通信和unique lock 智能指针shared ptr lambda表达式 生产者 消费者线程模型 项目背
  • 职场日常:测试常用测试工具盘点,你用过几个?

    测试工具永远是软件测试人员的得力助手 不能完全依赖工具 但也不能没有工具 在学习软件过程中 要著中软件测试工具的使用 1 测试管理工具 禅道 简单好用 市场主流 互联网行业居多 Jira 简单好用 bugzilla 功能简单 svn 代码和
  • StringBuffer简单使用

    StringBuffer简单使用 一 简介 StringBuffer 是可以存储和操作字符串 即包含多个字符的字符串数据 String类是字符串常量 是不可更改的常量 而StringBuffer是字符串变量 它的对象是可以扩充和修改的 St
  • 【Linux】如何在Linux下提交代码到gittee

    文章目录 使用 git 命令行 创建项目 三板斧第一招 git add 三板斧第二招 git commit 三板斧第三招 git push 其他几个重要的命令 git pull 将远端同步到本地 git rm 删除 git log 查看提交
  • 如何让 useEffect 支持 async/await?

    大家在使用 useEffect 的时候 假如回调函数中使用 async await 的时候 会报错如下 看报错 我们知道 effect function 应该返回一个销毁函数 return返回的 cleanup 函数 如果 useEffec
  • linux 查看运行进程的可执行文件所在目录

    1 获取PID 方法1 执行top命令 然后找到对应的进程 方法2 执行ps ef grep 程序名 2 进入proc目录下对应的进程路径 cd proc 3 sudo ls l user为root的进程需要sudo权限 exe连接的即可执
  • go语言基础-----11-----正则表达式

    1 正则表达式介绍 正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具 虽然正则表达式比纯粹的文本匹配效率低 但是它却更灵活 按照它的语法规则 随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符组合 Go语言通过r
  • Java-API简析_java.lang.RuntimePermission类(基于 Latest JDK)(浅析源码)

    版权声明 未经博主同意 谢绝转载 请尊重原创 博主保留追究权 https blog csdn net m0 69908381 article details 132571263 出自 进步 于辰的博客 因为我发现目前 我对Java API的