Security1 1(二)|学习笔记

简介: 快速学习 Security1 1(二)

开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Security1 1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/75/detail/15823


Security1 1(二)

 

内容介绍:

一、Java 的类加载器

二、 字节码的校验        

三、安全管理器和权限

 

二、字节码的校验

类加载器要做的事情是检查类文件,首先变量在使用之前都定义过,都初始化过给的初值,方法调用与对象引用的类型相匹配等等,一些是 Java 编译器做过的检查,如果字节码里通不过 Java 编译器就说明存在问题,通过之后就说明没有问题。已经生成了 class 文件,通过Java编译器编译的,在 Java 虚拟机里面node字节还要再做一次检查,原因是字节码很容易被篡改,Java 虚拟机再做一个类的时候,可以使用 noverity 标签忽略掉其他的步骤,跳过指令,无论如何去执行 hello。还会有分享,字节码很容易被修改。

举例,这里定义了变量 m和 n,两个赋初值一个是1一个是2,计算他们的值,如果当时写的时候写错了,m赋完初值之后应该对n赋初值,但是没有写成n写成了m,底下的代码就会显示n是一个没有初始化的值,因此代码是不合法的,得到的int的值是随机的值。能够经过编译的代码,编译出来的字节码就会呈现出来,红色标记的3c表示n=2,随便拿一个二进制的编译器将3c改为3B,对应的代码就是上面错误的代码。也就是如果编译完了字节码,如果对字节码比较熟悉可以将字节码篡改,篡改之后的字节码可能会带有一定的危险,所以 Java虚拟机加载了字节码之后必须进行校验。如果不做可能会存在风险。

image.png

 

三、安全管理器和权限

字节码属于比较低成本的,初级的措施,下面讲在 Java 安全体系里面利用安全管理器和自定义权限来进行安全控制的机制。安全管理器是运行的时候想让 Java 虚拟机安装一个安全管理器去进行安全的监测。包括创建一个新的类加载器的时候就需要进行权限检测,看看代码是否有权限。比如要退出虚拟机的时候也要进行安全监测,看看是否有权限。之前没有遇到这种情况是因为在运行的时候并没有要求在安全管理器的管理之下执行,直接写的是 Java hello 去运行类。但是如果希望在运行程序的时候有安全管理器,就需要做安全检查执行的时候 Java hello 之间是要传参的,想要安装安全管理器在运行java 虚拟机的时候安全管理机就会起作用,在运行代码的时候起作用。能够起作用的代码比如退出虚拟机的代码就会判断当前系统是否有安全管理器,也就是在运行的时候有没有让他在安全管理器的管理下运行。如果不为空就说明系统在执行 hello 这个类的时候是安装了一个安装管理器的,需要让安全管理器去检查能不能退出 Java 虚拟机。如果没有就是为空的话要指定安全管理器直接就会退出。所以之前从来都没有安装安全管理器等于有一部分的代码是没有的,是不执行的从来没有起过作用,但是现在如果是要启动这一部分代码。

image.png

安全管理器会去读 policy 的文件,就是文件名是以 .policy 结尾的,就是一个策略,策略就是下图所画的,会去说某一些代码具有什么样的权限集合。比如有一个 permission 的 file 就是这个策略,策略中写会去对 tmp 的所有文件有文件操作的权限,可以对文件做读和写,policy 实际上是在指定针对哪些代码,具有什么样的权限。本节课的重点是 policy 怎样写,指定代码有三种方式,一种方式是按照位置,第二种方式比较复杂后面会讲,就是用户的认证,用户认证之后实际上会带一些特征叫做 princ:pol. 第二种是不管代码在哪里,只要执行,执行的线程上具有指定的 princ:pol 操作。第三种是不管是谁在执行,不管代码在哪里,只管代码是谁签名的,比如从谷歌上下载了插件,插件是谷歌签名过的东西,就认为它是安全可靠的就具有某一个权限集。有三种方式后面会去讨论三种方式分别是什么意思。

image.png

演化的原因是在最初的 Java 里面,如果是本地代码就具有全部权限。如果是远程代码,会在一个叫沙盒的运行环境中运行,很多权限都没有,非常抽象。比如从谷歌上面下载了一个插件,希望使用它,它的作用是在本地打开打印机去做一些操作,这时发现不允许,因为沙盒没有操作打印机的权限。

image.png

后来演变为远程的代码如果是授信的组织,比如谷歌签过名的代码就和本地代码一样,具有全部的权限,否则的话还是在沙盒里。这个方式的好处是要么什么都有,要么什么都没有,而且还区分本地和远程。

image.png

相关文章
|
弹性计算 数据可视化 Serverless
函数计算FC3.0评测|2.0的蜕变
函数计算FC3.0评测|2.0的蜕变
120769 18
|
3月前
|
人工智能 关系型数据库 MySQL
【第3天】每天一个MySQL知识点,百日打怪升级
本系列由10年经验DBA主理,系统讲解MySQL安装(RPM/二进制/源码)与核心配置,涵盖`my.cnf`优先级、`innodb_buffer_pool_size`调优、连接与日志参数设置、四种生效方式对比,并附生产避坑指南与面试高频考点,助力快速入门与实战进阶。(239字)
316 2
|
2月前
|
前端开发 Java 测试技术
2026阿里云服务器2核2G、2核4G、4核8G、8核16G价格:热门实例性能与活动价格及选购指南
阿里云2核2G至8核16G云服务器活动价格与选购方案参考:目前,2核2G轻量应用服务器新用户抢购价低至38元/年,2核4G月付9.9元起、年付199元;4核8G通用算力型u2i实例活动价1252.63元/年,8核16G计算型c9i实例活动价5958.52元/年。本文梳理了经济型e实例、轻量应用服务器、u1/u2i实例及c9i实例的性能特点与适用场景,建议用户根据业务需求匹配实例类型,并通过领取阿里云优惠券进一步降低成本。
Unity精华☀️GetInstanceID 和 GetHashCode 的区别
Unity精华☀️GetInstanceID 和 GetHashCode 的区别
|
JSON 搜索推荐 API
利用快手电商 API 接口,实现快手小店商品价格区间精准定位
在快手电商中,通过调用API获取商品数据,并利用统计方法(如四分位数)精准划分价格区间,可优化选品策略、提升转化率。结合Python实现,助力电商智能化运营。
|
Oracle Java 关系型数据库
java 编程基础入门级超级完整版教程详解
这份文档是针对Java编程入门学习者的超级完整版教程,涵盖了从环境搭建到实际项目应用的全方位内容。首先介绍了Java的基本概念与开发环境配置方法,随后深入讲解了基础语法、控制流程、面向对象编程的核心思想,并配以具体代码示例。接着探讨了常用类库与API的应用,如字符串操作、集合框架及文件处理等。最后通过一个学生成绩管理系统的实例,帮助读者将理论知识应用于实践。此外,还提供了进阶学习建议,引导学员逐步掌握更复杂的Java技术。适合初学者系统性学习Java编程。资源地址:[点击访问](https://pan.quark.cn/s/14fcf913bae6)。
1347 2
|
弹性计算 监控 安全
打造安全云环境:深入理解阿里云权限体系
本文将探讨阿里云上的权限管理,帮助理解其背后原理并掌握实践方法。主要内容分为三部分:一是访问控制基本原理,强调避免使用root身份,介绍权限策略语言和类型;二是五种典型的授权方式,包括服务级、操作级和资源级授权等;三是多账号环境下的集中化权限管理,重点介绍如何使用管控策略实现安全合规的集中管控。通过这些内容,用户可以更好地理解和应用阿里云的权限管理体系,确保云资源的安全与高效管理。
|
图形学
Unity3D简陋版跑酷游戏
Unity3D简陋版跑酷游戏
Unity3D简陋版跑酷游戏
|
运维 Devops 测试技术
一个人活成一个团队:python的django项目devops实战
DevOps通过自动化的流程,使得构建、测试、发布软件能够更加地快捷、频繁和可靠。本文通过一个python的django个人博客应用进行了DevOps的实战,通过DevOps拉通开发和运维,通过应用云效的DevOps平台实现自动化“软件交付”的流程,使得构建、测试、发布软件能够更加地快捷、频繁和可靠,提交研发交付效率。作为个人项目也是可以应用devops提高效率。
519 3