沙箱安全机制
什么是沙箱
沙箱是一个限制程序运行的环境
什么是沙箱机制
沙箱机制就是将Java代码限定在JVM特定的运行范围中,并严格限制代码对本地系统资源的访问,以此来保证对代码的有效隔离、防止对本地系统造成破坏。不同级别的沙箱对本地系统资源的访问限制不同(CPU、内存、文件系统、网络)
组成沙箱的基本组件
1.字节码校验器
确保字节码文件(.class文件)遵守Java语言规范,实现Java程序的内存保护
注:并非所有的字节码文件都会经过字节码校验,例如核心类的字节码文件
2.类加载器
- 防止恶意代码干涉善意代码
- 守护了被信任的类库边界
- 将代码归入不同的受保护域,限制了代码的权限(不同的保护域拥有不同的权限,类拥有所处受保护域的所有权限,一个类只能属于一个受保护域)
类加载器的机制是双亲委派机制
3.存取控制器
控制核心API对操作系统的存取权限(控制策略可由用户设定)
4.安全管理器
核心API和操作系统间的主要接口,实现权限控制,优先级高于存取控制器
5.安全API
Java提供的安全API
Java安全模型
JDK1.0安全模型
代码分为本地代码和远程代码,本地代码默认可信任,远程代码默认不可信任。受信的本地代码可以访问一切本地资源,非受信的远程代码在早期的Java实现中,安全依赖于沙箱(Sandbox) 机制
但严格的安全机制给程序的功能扩展带来了阻碍
JDK1.1安全模型
针对安全机制进行改进,添加了安全策略,可设定代码对本地资源的访问权限
JDK1.2安全模型
再次改进了安全机制,添加了代码签名。不论本地代码与远程代码,均依安全策略,通过类加载器将类加载到JVM中不同权限的命名空间,实现权限控制
JDK1.6安全模型
引入了域 (Domain) 的概念
类加载器将所有代码加载到不同的系统域和应用域(统称受保护域)。系统域负责与关键资源进行交互;应用域通过系统域的代理,对需要的资源进行访问。JVM中不同的受保护域 (Protected Domain),对应不同的权限 (Permission)。存在于不同域中的类拥有当前域的所有权限