从头读<<深入Java虚拟机第二版>> 第三章 安全

以下内容全部摘自<<深入Java虚拟机第二版>>
欢迎转载, 欢迎拍砖

1 为什么需要安全

2 基本沙箱

3 类装载器体系结构
在JAVA沙箱中,类装载器体系结构中第一道防线.类装载器体系结构在三个方面对JAVA的沙箱起作用:
它防止恶意代码去干涉善意的代码
它守护了被信任的类库的边界
它将代码归入某类(称为保护域),该类确定了代码可以进行哪些操作
类装载器体系结构可以防止恶意代码去干涉善意代码,是通过为由不同的类装载器装入的类提供不同的命名空间来实现的

4 class文件校验器
和类装载器一起,CLASS文件检验器保证装载的class文件内容有正确的内部结构,并且这些class文件相互间协调一致.
它只在执行前而不是执行中对字节码进行一次分析(并验证它的完整性)
class文件校验器有四趟独立的扫描来完成它的操作:
第一趟扫描是在类装载时进行的,在这次扫描中,class文件检验器检查这个class文件的内部结构,以保证它可以被安全的编译
第二趟和第三趟扫描是在连接过程中进行的,在这两次扫描中,class文件检验器确认类型数据遵从JAVA编程语言的语义,包括检验它所包含的所有字节码的完整性
第四趟扫描是在进行动态连接的过程中解析符号引用时进行的,在这次扫描中,class文件检验器确认被引用的类,字段以及方法的确实存在

4.1 第一趟 class文件结构检查
每个class文件必须以同样的字节开始,以0xCAFBEAE开头.验证是否为class文件.检验器还必须确认在class文件中声明的主版本号和次版本号,这个版本号必须在这个JAVA虚拟机实现可以支持的范围内
而且,在第一趟扫描中,class文件校验器必须检验确认这个class文件没有被删节,尾部也没有附带其它字节.(class文件中包含的每一组成部分都声明了它的长度和类型)
每一趟扫描保证这个字节序列正确的定义了一个新类型,必须遵从JAVA的CLASS文件固定格式,这样才能被编译成在方法区中的内部数据结构,第二,三,四趟扫描是在方法区,由实现和数据上进行的检查
4.2 第二趟 类型数据的语义检查
校验一些在编译时应该遵循的规则,因为不能确定是否由正确定的编译器正确的生成
4.3 第三趟 字节码验证

第一,二,三趟扫描中,class文件检验器可以保证导入的class文件构成合理,内在一致,符合JAVA编程语言的限制条件,并且包含的字节码可以被JAVA虚拟机安全的执行
4.4 第四趟 符号引用的验证
JAVA虚拟机将追踪那些从被验证的class文件到被引用的class文件,以确保引用是合法的
1.查找被引用的类
2.将符号引用替换为直接引用
4.5 二进制兼容

5 Java虚拟机中内置的安全性
.类型安全的引用转换
.结构化的内存访问
.自动垃圾收集
.数组边界检查
.空引用检查

6 安全管理器和JAVA API
保护虚拟机的外部资源不被虚拟机运行的恶意或有漏洞的代码侵犯
当Java API即将进行一个潜在的不安全的动作时,将遵循以下两个步骤
1.Java API的代码检查有没有安装安全管理器,如果没有安装,则直接跳过第二步直接继续这个潜在的不安全的动作
2.调用安全管理器中合适的check方法.如果这个操作被禁止,那么这个check方法会抛出一个安全异常,这将导致Java API方法立即中止,这个潜在的不安全的动作不会执行.
   相反,如果这个方法被允许,那么这个check方法将简单的返回.在这种情况下,这个Java API方法将继续执行,并执行这个潜在的不安全的动作.
  
7 代码签名和认证
8 策略
9 保护域
10 访问控制器
11 JAVA安全模型的不足和今后的发展方向
12 和体系结构无关的安全性

你可能感兴趣的:(java,数据结构,编程,虚拟机)