Java的内置安全模式-"沙箱"特性

      Java的安全模式是其多个重要结构特点之一,它使Java成为适于网络环境的技术.因为网络提供了一条攻击连入的计算机的潜在途径,因此安全性第非常重要的.如果在一个环境中,软件可以通过网络下载并在本地运行,这个问题尤为重要.例如Java applet和Jini服务对象就是这样的例子.因为当用户浏览器中打开网页时,applet的calss文件被自动下载,很有可能用户会遇到不可靠来源的applet.同样,当一个Jini服务对象用Jini查找服务进行服务注册时,它的calss文件将从服务供应商制定的代码库进行下载.Jini实现了一个自发的网络互联,在这个网络,客户机进入一个全新的环境查找并访问本地可用服务,因此,Jini服务的客户机可能会遇到来自不可靠来源的服务对象.

     Java安全模式侧重于保护终端用户免受从网络下载、来自不可靠来源的、恶意程序(以及善意程序中的BUG)的侵犯.为了达到这个目的,Java提供了一个用户可配置的"沙箱",在沙箱中可以放置不可靠的Java程序.沙箱对不可靠的活动进行了限制,程序可以在沙箱的安全边界内做任何事,但是不能进行任何跨越这些边界的举动,最初的版本1.0的沙箱对很多不可靠的Java applet的活动进行了限制,包括:

  •  对本地硬盘进行的读写操作.
  • 进行任何网络连接,但是不能连接到这个applet的源主机上.
  • 创建新的进程.
  • 装载新的动态连接库  

      由于下载这些代码不可能进行这些特定的操作,这就使Java安全模型可以保护终端用户免受恶意或有漏洞的代码的威胁,所以用户可以相对安全的运行不靠代码,但是对于1.0系统的程序员和用户来说,这个最初的沙箱限制太过严格,善意(但不可靠)的代码常常无法进行有效的工作,所以最初的沙箱得到了改进,引入了基于代码签名和认证的信任模式.签名和认证使得接受端系统可以确认一系列class文件(在一个JAR文件中)已经由某一实体进行了数字签名(有效,可被信赖),并且在签名后,这些class文件没有改动.这就使得终端用户和系统管理员减少了对某些代码在沙箱中的限制,但这些代码必须由团体进行数字签名.

      组成Java沙箱的基本组建如下:

  •  类装载器结构
  • class文件检查器
  • 内置于Java虚拟机(及语言)的安全特性.
  • 安全管理器及Java API
   Java的沙箱安全模型,最重要的优点之一就是这些组件中的类装载器和安全管理器是可以有用户定制的.

  1. 类装载器体系结构 
     类装载器体系结构在三个方面对Java的沙箱起作用:

  • 它防止恶意代码去干涉善意的代码
  • 它守护了被信任的类库的边界
  • 它将代码归入某类(称为保护域),该类确认了代码可以进行哪些操作
     类装载器体系结构可以防止恶意的代码去干涉善意的代码,这是通过为由不同的类装载器装入的类提供不同的命名空间来实现的.

    2.class文件检查器

    和类装载器一起,class文件检查器保证装载的class文件内容有正确的内部结构,并且这些文件相互间协调一致.如果class文件检查器在class文件发现了问题,它将抛出异常,好的Java编译器不应该产生畸形的class文件,但是Java虚拟机并不知道某个特定的class文件是如何被创建的.
  • 第一趟:class文件的结构检查
  • 第二趟:类型数据的语义检查
  • 第三趟:字节码验证
  • 第四趟:符号引用的验证

   3.Java虚拟机中内置的安全特性

   Java虚拟机装载一个类,并且对它进行了第一到第三趟的class文件检查,这些字节码就可以被运行了.除了对符号引用的检验(class文件检验的第四趟扫描),Java虚拟机在执行字节码时还进行其他一些内置的安全机制的操作.同样,他们也是Java虚拟机的特性:
  • 类型安全的引用转换
  • 结构化的内存访问(无指针算法)
  • 自动垃圾收集(不必显式地被释放分配的内存)
  • 数组边界的检查
  • 空引用检查
   通过保证一个Java程序只能使用类型安全的、结构化的方法去访问内存、Java虚拟机使得Java程序更为健壮,也使得他们的运行更为安全.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值