为了达到安全性的目的,java 提供了一个用户可配置的“沙箱” 在沙箱中可以放置不可靠的Java程序。
1.0中applet的活动限制
1.对本地硬盘的读写
2.进行任何网络连接,但补课连接到提供此applet的源主机
3.创建新进程
4.装载新的动态链接库
基本沙箱组件如下
1.类装载器结构
2.class文件检验器
3.内置Java虚拟机(及语言)的安全特性
4.安全管理器及JavaApi
java 安全模型最大优点是组件中的类加载器和安全管理器是可以定制的。
下面详细介绍一下。
1.类加载器体系结构
1)放置恶意代码干涉善意代码
2)它守护了被信任的类库的边界
3)它把代码归入某类(保护域) ,该类确定了代码可以进行那些操作
两个类加载器提供了不同的命名空间,不同类加载器之间互不可见
类加载器有以下几类
1)引导类加载器
2扩展类加载器
3)系统类加载器(应用类加载器)
类加载器为父-子体系结构
Bootstrap rt.jar
Extension jre/lib/ext
System CLASSPATH
Plugin plugin.jar
注意 类加载器倒置问题。
每个线程都有一对类加载器的引用,称为上下文类加载器 主线程创建的是系统类加载器,新线程创建时,上下文类加载器会被设置成创建线程的上下文类加载器
Class文件检验器
class文件的四趟独立扫描
1)类加载时进行 class文件检验器检查其内部结构,保证他可以安全编译
2)23趟在连接时过程中进行,检查所有字节码完整性,
3)4趟动态连接过程中解析符号引用时进行,class文件检验器确认被引用类,字段和方法确实存在
安全管理器与访问权限
数字签名技术
公钥加密 私钥签名 与计算机网络中数字安全一样哈。。不详细说了
每一个方法调用都有自己的一个栈帧,存储局部变量信息和计算的中间结果 用于存储方法中间结果的部分被成为方法的操作数栈。