【JVM】JVM的沙箱机制

我们平时说Java是安全的,可以使用户免受而已程序的侵犯,这是因为Java提供了一个“沙箱”机制,这个“沙箱”基本组件包括如下4部分:

1、类装载器
在Java沙箱中,类装载体系结构是第一道防线,可以防止而已代码去干扰正常程序代码,这是通过由不同的类装载器装入的类提供不同的命名空间来实现的。命名空间由一系列唯一的名称组成,每一个被装载的类都有不同的命名空间是由Java虚拟机为每一个类装载器维护的。

类装载器体系结构在三个方面对java的沙箱起作用

1)它防止恶意代码区干涉善意的代码
2)它守护了被信任的类库边界
3)它将代码归入保护域,该域确定了代码可以进行哪些操作。

2、Class文件检验器

Class文件检验器保证装载的class文件内容的内部结构的正确,并且这些class文件相互协调一致。
Class文件检验器实现的安全目标之一就是程序的健壮性,JAVA虚拟机的class文件检验器要进行四趟扫描来完成它的操作:

第一趟:此次扫描是在类被装载的时候进行的,在这次扫描中,class文件检验器检查这个class文件的内部结构,以确保它能够被安全的编译。

第四趟:这次扫描是在进行动态连接的过程中解析符号引用时进行的,在这次扫描中,class文件检验器确认被引用的类、字段以及方法确实存在。

3、 内置于Java虚拟机的安全特性
Java虚拟机装载一个类,并且对它进行了第一到第三趟的class文件检验,这些字节码就可以运行了。除了对符号引用的检验,Java虚拟机在执行字节码时还进行其他一些内置的安全机制的操作。这些机制大多数是java的类型安全的基础,它们作为java语言程序健壮性的特性。

1、类型安全的引用转换
2、结构化的内存访问
3、 自动垃圾收集
4、 数组边界检查
5、空引用检查

4、安全管理及Java API
Java安全模型的前三个组成部分——类装载器体系结构,class文件检验器及java中的内置安全特性一起达到一个共同的目的:保持java虚拟机的实例和它正在运行的应用程序的内部完整性,使得它们不被恶意代码侵犯。
相反,这个安全模型的第四个组成部分是安全管理器,它主要用于保护虚拟机的外部资源不被虚拟机内运行的恶意代码侵犯。这个安全管理器是一个单独的对象,在运行的java虚拟机中,它在访问控制对于外部资源的访问中起中枢的作用。

参考:
《深入理解Java虚拟机:JVM高级特性与最佳实践》及其他文档


声明:图片来自源于网络。这是之前整理的word笔记,没有注明图片具体来源,抱歉。在此向贡献图片的人表示感谢。