自从Java技术出现以来,有关Java平台的安全性及由Java技术发展所引发的新的安全性问题,引起了越来越多的关注。目前,Java已经大量应用在各个领域,研究Java的安全

性对于更好地使用Java具有深远的意义。本文主要从两个方面阐述了Java的安全性:一是Java平台(主要通过JDK)的安全完备性;二是Java虚拟机的安全机制。

Java平台提供的原始安全模式是沙箱模型。对于从开放网络中得到的不被信任的代码,该模型提供了一个非常严格的使用环境。沙箱模型的实质在于信任本地代码,使其可以完全访问重要的系统资源(例如文件系统);而对于下载的远程代码则不被信任,因此只能访问沙箱内提供的有限资源。沙箱模型通过Java开发工具包(JDK)发布,一般被用JDK编写的应用程序所采纳(包括支持Java的网络浏览器)。

Java开发工具JDK 1.2 中引入了新的安全体系结构,安全检查扩展到所有Java程序,包括应用程序及Applet。所有本地代码均可信任的概念已不再存在。相反,本地代码的安全控制与Applet的类似。当然,必要时本地代码(或远程代码)上的策略仍有可能被声明为具有最大自由权,从而使之类似完全可信任的代码那样高效运行。同样的原则适用于签名的Applet 和所有Java应用程序。

Java沙箱是运行Java小应用程序的一个软件单元,对Java小应用程序的访问权限加以限制,防止它访问计算机的关键部分,如磁盘驱动器、网络套接口和内存区。Java沙箱由三部分组成:字节码检验器、类装载器和安全管理器,这三部分共同完成装载和运行时对Java Applet的检验,用以限制对文件系统和网络的访问以及对浏览器内部的访问。

Java程序可以从网络上下载运行,这必然带来许多不安全因素。一些恶意的Hacker可以直接写出字节代码段攻击用户节点,如删除文件、搞乱硬盘或未经用户许可在网上发送本地信息等。这些防卫本地机被攻击的任务就交给了Java虚拟机完成。Java虚拟机提供了几种安全机制,其中两种主要的机制是安全管理器和Java类文件认证器。

全管理器是安全的实施者,它是一个可扩展类,提供加在应用程序和特殊系统上的安全措施。它实现Java虚拟机的安全策略。安全管理器建立Java程序的名空间,限制对网络、本地文件系统和程序其它部分的访问。

Java认证器在.class文件运行前完成该文件的安全检查,确保Java字节码符合Java虚拟机规范。Java平台通过使用认证器查看类文件的句法和词法的正确性,检查版本及API符合性等,保证病毒和其它恶意程序不会侵犯本地系统。认证器包括四个阶段的操作:类文件认证、类型系统认证、字节码认证和运行时类型的访问检查。此外,认证器在检查期间能识别算法操作的上溢和下溢等其它可能发生在运行期间的程序错误。

Java虚拟机是加在当前主机操作系统上的,由于Java 字节码执行速度目前要比本地机器慢10~20倍,速度问题可能是影响Java推广的惟一原因。目前,针对Java虚拟机程序速