作为一种诞生于互联网兴起时代的语言,Java 从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的 Java 程序是安全的,如何对 Java 程序访问本地资源权限进行有限授权,这些安全角度的考虑一开始就影响到 Java 语言的设计 与实现。可以说 Java 在这些方面的探索与经验,对后来的一些语言与产品都带来了积极影响。
本篇文章中将介绍 Java 中安全模型,以及如何利用安全访问控制机制来实现一些特定目的。
Java 中的安全模型
在 Java 中将执行程序分成本地和远程两种,本地代码默认视为可信任的,而远程代码则被看作是不受信的。对于授信 的本地代码,可以访问一切本地资源。而对于非授信的远程代码在早期的 Java 实现中,安全依赖于沙箱 (Sandbox) 机制 。沙箱机制就是将 Java 代码限定在虚拟机 (JVM) 特定的运行范围中,并且严格限制代码对本地系统的资源访问,通过这 样的措施来保证对远程代码的有效隔离,防止对本地系统造成破坏。如图 1 所示,
图 1.JDK1.0 安全模型
但如此严格的安全机制也给程序的功能扩展带来障碍,比如当用户希望远程代码访问本地系统的文件时候,就无 法实现。因此在后续的 Java1.1 版本中,针对安全机制做了改进,增加了安全策略,允许用户指定代码对本地资源的访问 权限。如图 2 所示,
图 2.JDK1.1 安全模型
在 Java1.2 版本中,再次改进了安全机制, 增加了代码签名。不论本地代码或是远程代码,都会按照用户的安全策略设定,由类加载器加载到虚拟机中权限不同的运行 空间,来实现差异化的代码执行权限控制。如图 3 所示,
图 3.JDK1.2 安全模型
时间: 2024-09-13 02:02:00