浅析Java体系结构对信息安全的支持

(整期优先)网络出版时间:2009-08-18
/ 2

浅析Java体系结构对信息安全的支持

邓丽君陈剑英鲁志辉

(湖南工业职业技术学院,湖南长沙410208)

摘要:介绍了Java体系结构的组成,并从Java语言本身及其内部结构中的类装载器以及安全管理等方面分析了Java平台对信息安全的支持。

关键词:Java;体系结构;平台无关性;安全

随着科学技术的不断发展,网络在人们生活中的作用也愈加重要,如何保证网络运行的安全性,是一个很关键的问题。Java很好地解决了这类问题,Java语言拥有三大特征:平台无关性、网络移动性和安全性,而Java体系结构对这三大特征提供了强大的支持和保证。Java语言在创建时就充分考虑了安全性,市场普遍认为Java是一种“安全的”语言,它有完备的、设计到其结构的安全模式。

1Java体系结构介绍

Java是Sun公司推出的Java语言和Java平台的总称。完整的Java体系结构实际上包含4个组件:Java编程语言,Java类文件,JVM(Java虚拟机),JavaAPI(应用程序接口)。作为编程语言的Java具有众多优点,当然也包含它对信息安全的支持,而真正形成这些优点的是其底层架构。其工作流程是:首先Java的源代码Java文件由编译器编译成Java的二进制字节码class文件,然后class文件由Java虚拟机中的类装载器进行加载,同时类装载器还会加载Java的原始APIClass文件,类加载器主要负责加载、连接和初始化这些class文件以后,就交给虚拟机中的执行引擎运行,执行引擎将class文件中的Java指令解释成具体的本地操作系统方法来执行,而安全管理器将在执行过程中根据设置的安全策略控制指令对外部资源的访问。

2Java体系结构对安全性的支持

2.1Java语言本身安全性

Java语言的设计者们是在C++的基础上设计出来Java的,因此与C++相比它的语法更加简单清晰,结构、单元、运算符重载、虚拟基础类等在Java中都没有采用,并且取消了多重继承而采用实现多个接口的方式。这样能降低开发人员犯错误的几率,帮助他们写出更安全的代码。Java中去除了C++语言中的令人费解、容易出错的“指针”,用列表、堆、哈希表等结构来代替,避免了任何不安全的结构。Java也没有索引核查的数组访问,因为这往往会导致不定的、不可预测的程序操作,它所有的数组访问都必须先检查是否越界。Java要求所有的变量在初始化以前不能使用,对于基本数据类型变量都会自动地赋给某个初始值,避免了未初始化变量获取内存信息。所有这些都使得程序不能访问任意的内存地址,对于内存中的实体信息只能通过有权限的对象进行访问,而不会出现象C++那样把类型指针强制转换成内存的指针,然后通过内存查找的方法找到私有的变量。

Java分配内存对于开发人员来说是透明的,开发人员使用new方法新建对象,这时候虚拟机就会从堆内存中找到合适的内存空间,开发人员不需要也不能够进行干预。而对于内存的回收,Java避免了开发人员明确干预对象的回收,Java的内存回收器目的就是找到不再引用的对象,释放内存空间,并且需要整理内存的碎片空间,尽量避免出现“内存不足”的情况。

对于在网络中交换的序列化对象很容易在重建对象的时候访问到对象的私有信息,这时候Java提供了两种办法来保护信息,一种就是采用给变量加上transient关键字的方法,这样对象序列化的时候就不会读写该变量,另一种就是在实现Externalizable接口而不是Serizlizable接口,这样对象就只能通过writeExternal和readExternal方法来保存和重建,其他方法无法进行了。以上这些都是Java语言本身对信息安全提供的基础。

2.2虚拟机的类加载器

类装载器在Java虚拟机实现安全性和网络的灵活性方面起着很重要的作用。类的装载就是寻找一个具有特定名称的类或接口的二进制表示,并构造与之对应的内存结构。在这个过程中,类装载器必须对被装载的类文件进行简单的校验,确保其安全性。Java应用程序可以用两种类型的装载器:原始类装载器和类装载器对象。Java虚拟机把通过原始类装载器装载的类都看作是可信任的,不管他是否来自JavaAPI。而它把那些通过类装载器对象装载的类看作是不可信任的,因为原始类装载器是Java虚拟机实现的一部分,而类装载器对象不是,他是用Java语言书写并被编译成类文件,然后被虚拟机装载,接着像其他类那样被实例化,实际上他们只是Java应用程序的一部分,通过下图可以看出原始类装载器和类装载器对象之间的区别。

2.3安全管理器和JavaAPI

JavaAPI保证了Java程序运行的安全模式。JavaAPI中的方法在执行任何有潜在危害的行为时,都要经过认证检查。JavaAPI方法的认证检查由安全管理器来完成。安全管理器是从类java.lang.SecurityManager发展来的Java类。它完全是用Java编写的,因此Java安全管理器都是可定制的。一个安全管理器允许程序为一个应用建立一个定制的安全策略,也能够通过对安全管理器进行写操作来建立多个安全策略。JavaAPI在它进行某项可能会带来潜在的不安全影响的操作之前必须通过请求安全管理器获得许可,由安全管理器来决定是否允许执行这个操作,程序员可以根据应用的具体情况确定一个定制的安全策略。安全策略可以看作是从描述运行代码的一套特征到代码允许的访问许可权的映射的集合。这个集合由策略文件表示,而具体的每一条映射则由代码源和作用于该代码源的一大套许可权组成,一个代码源可以对应多个许可权。通常JavaAPI执行一个可能不安全活动的过程,分为两步:首先,JavaAPI代码检查安全管理器是否己安装,如果没有安装,就无法进行第二步的检查,则直接执行可能不安全的代码;如果安装了,就继续执行第二步的检查,调用安全管理器中合适的检查方法对动作进行检查,如果动作被禁止,检查方法就抛出一个安全异常,不再执行不安全的活动;如果动作被允许,检查方法返回,JavaAPI方法继续执行动作。

结束语

在网络高速发展的时代,人们对信息的高度依赖,网络信息安全越发重要,而作为网络编程语言的Java自出现以来,它的安全体系结构就在不断的发展,新的安全模型和机制在不断的提出,而安全也不断得到加强。

参考文献

[1]何凌毅,樊莉萍.Java安全机制的研究[J].计算机工程与科学,2005.

[2]王立冬,张凯.Java虚拟机中类装载器的实现[J].计算机应用,2002.

[3]冀振燕,程虎.Java的安全结构[J].微型机与应用,2007.

[4]BruceEckel.侯捷译.Java编程思想[M].北京:机械工业出版社,2002.

作者简介:邓丽君(1982~),女,汉族,湖南衡阳人,硕士在读,助讲,湖南工业职业技术学院信息工程系,计算机软件方向。陈剑英(1971~),女,汉族,湖南华容人,硕士在读,讲师,湖南工业职业技术学院信息工程系,计算机软件方向。鲁志辉(1968~),女,汉族,湖南浏阳人,硕士,讲师,湖南工业职业技术学院信息工程系,计算机软件方向。