Java虚拟机实现安全特性(二),看完你会不收藏?不信你看看

前言

昨天开始的Java虚拟机安全特性这部分,没想到当天就有好多朋友进来看了并且收藏起来了,还有朋友说确实关注的比较少,因此,小疯子码字也是动力满满,错别字多,一定改正哈,码字不容易,且码且珍惜~

喜欢收藏点关注哦!因为这是一个每天都在坚持的小疯子~每天都会给你带来一点进步

正文

  1. 基本沙箱

不知道大家在使用电脑时是否曾经听过这个名词,我记得360会自带沙箱,有时候我插入U盘,运行一些未知的应用,360会提醒我,不安全应用,将在沙箱内运行,当时我对这个概念也不是很懂。

Java虚拟机的沙箱也是同一个道理,针对一个软件,如果在运行前,不信任它,那么你就可以把它放入沙箱运行。

针对用户而言,什么软件是安全的?什么是不安全的?难道需要我们用户自己识别么?当然,我们是没有这个能力的,而把这么重要的安全任务交给用户,是不现实的,也是不科学的,Java虚拟机当然没有这样做,你完全可以接受来自任何来源的代码,并不限制你从不信任的站点下载代码到本地机器,但是下载到本地机器的代码,沙箱会限制它们运行可能会破坏计算机系统的动作,我们不需要自己去识别哪些代码是安全的,哪些代码是不安全的,也不必要去扫描文件,看是否存在病毒,沙箱本身就限制了下载的任何病毒或者其他恶意破坏的代码,使得他们不会对计算机造成破坏。

说了这么多,总结起来,就是沙箱是个全家桶,给你包办了所有需要做的工作,你就安装它然后尽情的使用吧,那么,将所有的任务都交给沙箱处理,我们怎么能确保沙箱就一定安全呢?为了保证沙箱没有漏洞,Java安全模型对其体系结构的各方面都做了考量,如果Java体系结构中有任何没有考虑到的安全区域,恶意程序员就很可能会发现这些漏洞进行攻击,因此,我们对否还有必要去了解一下Java体系结构的几个不同部分,看看他们是怎么工作的?

组成沙箱的基本机构如下:

  • 类装载器

  • class文件检验器

  • 内置于Java虚拟机的安全特性

  • 安全管理器及JavaAPI

Java的沙箱模型,最重要的优点之一就是这些组件中的类装载器和安全管理器是可以由用户自己定制的,通过定制这些组件,可以为Java程序创建个性化的安全策略。但是,所有的依靠用户都是一种不可靠的冒险,这种体结构的灵活性也对它自己的安全性产生了一定风险,类装载器和安全管理器都是非常复杂的,单纯的定制操作很容易造成一些错误,从而产生漏洞。

Java API的每一个主要版本中,都进行了一些改进,使得出错的机会大大减少,在1.2版本中,引入了一个新的更为精细的访问控制体系结构,利用Java2平台提供的安全管理器,允许用户在一个和程序分离的ASCII策略文件中说明安全策略,在运行时,这个预先制作好的安全管理器将获得一个类(称为访问控制器)的帮助,来执行在策略文件中说明的安全策略。

2.类装载器

在Java沙箱中,类装载器体系结构是第一道防线,类装载器任务是将代码装入虚拟机的,因此,能否在第一道关口就是识别恶意代码是可以减轻后面的压力的。

类装载器的主要任务是:

  • 防止恶意代码去干涉善意的代码。

  • 守护了被信任的类库的边界

  • 它将代码归入某类(称为保护域),该类确定了代码可以进行哪些操作。

类装载器可以防止恶意代码去干涉善意的代码,如果是你,你会怎么考虑?你可以先想想,我们在学习类装载器的时候,用到过这个知识,这里只要一点,你就明白了,为什么要广泛的涉猎知识,也是这个道理,其实,说到底,知识都是相互借鉴的。

大家都知道类装载器氛围好几种,不同的类装载器分别装载不同的类,而装载完以后,虚拟机将为这些类提供不同的命名空间文件来保存他们,命名空间由一系列唯一的名称组成,每一个被装载的类有一个名字,由虚拟机为每一个类装载器维护,如果一个类装载器把一个名为name的类装载入一个特定的空间,那么,它就不能再装载入一个同名name的类了,只能通过创建其他装载器,来装载这个类了,并且保存在不同的命名空间内。

命名空间有安全的实现,你可以有效的的在装载入不同命名空间的类之间架起一个防护罩,在Java虚拟机内部,同一个命名空间的类是可以相互之间进行交流的,而不同的命名空间之间是不可以进行交流的,你甚至不能察觉到彼此的存在,除非你显式的提供了允许他们进行交互的机制,因为,如果一个恶意代码被装载进虚拟机,因为处于单独的一个命名空间,它就无法干涉其他命名空间的类的正常运作。

今天先介绍到这里,明天继续介绍类装载器的知识,带你看看一个不一样的类装载器~喜欢收藏点关注哦!

举报
评论 0