[watermark]第三章 安全
Java体系结构采用了一个扩展的内置安全模型,Java安全模型侧重于保护终端用户免受从网络下载的、来自不可靠来源的、恶意程序的侵犯。Java提供了一个用户可配置的“沙箱”,在沙箱中可以放置不可靠的Java程序。沙箱对不可靠程序的活动进行了限制,程序可以在沙箱的安全边界内做任何事,但是不能进行跨越这些边界的举动。
组成Java沙箱的基本组件:
1)类装载器结构
2)Class文件检验器
3)内置于Java虚拟机(及语言)的安全特性
4)安全管理器及Java API
一.类装载器体系结构
……………………………..
. 启动类装载器 .
……………………………..
……………………………..
. 标准扩展类装载器 .
……………………………..
……………………………..
. 类路径装载器 .
……………………………..
……………………………..
. 网络类装载器 .
……………………………..
类装载器体系结构在三方面对Java的沙箱起作用
1)它防止恶意代码去干涉善意的代码。
2)它守护了被信任的类库的边界
3)它将代码归入某类(称为保护域),该类确定了代码可以进行哪些操作。
Java虚拟机只把彼此访问的特殊权限授予由同一个类装载器转载到同一个包中的类型。
运行时包:由同一个类装载器装载的、属于同一个包的、多个类型的集合。在允许两个类型之间对包内可见的成员进行访问前,虚拟机不但要确认这两个类型属于同一个包,还必须确认它们属于同一个运行时包(即同一个类装载器装载)。
类装载器必须将每一个被装载的类放置在一个保护域中,一个保护域定义了一个代码在运行时将得到怎样的权限。
二.Class文件检验器
和类装载器一起class文件检验器保证装载的class文件内容有正确的内部结构,并且这些class文件相互间协调。
Class文件检验器要进行4趟独立的扫描来完成它的操作
1)class文件的内部结构检查
目的:保证字节序列正确地定义了一个新的类型,它必须遵从Java的class文件固定格式,这样才能被编译成在方法区的(基于实现的)内部数据结构。
2)类型数据的语义检查
Class文件检查器在运行时检查了一些Java语言应该在编译时遵守的强制规则
3)字节码验证
这趟扫描中Java虚拟机对字节流进行数据分析
4)符号引用的验证
这趟检查中Java虚拟机那些引用-----从被验证的class文件到被引用的class文件,以确保这个引用是正确的。
[/watermark] |