Java杂谈6——Java安全模型

  Java语言安全模型是其有别于传统的编程语言的一个很重要的特色,采用一种沙箱模型隔离了Java的运行环境与具体的操做系统,使得Java在网络环境下可以更为安全的运行。理解Java的安全模型,可以帮助咱们站在更高的层面理解Java的底层实现,在适当的时机及时找出问题所在。html

沙箱模型的创建主要涉及了Java语言相关的如下几个部分:编程

  • 类加载器;

    运行时包:指由同一个类加载器装载的、属于同一个包的、多类型的集合。任意两个Java类包访问权限适用的前提是:属于同一个包,还必须是属于同一个运行时包。这样规定的动机之一就是防止一个由用户自定义类加载器装载的Java类非法获取到Java核心API的包访问权限。数组

         例如:经过动态类加载一个名为Java.lang.Virus的Java类可以被装载到内存,因为这个类是属于包Java.lang。若是不加以限制,这个外部的类就会拥有包内其余类的包访问权限。安全

         双亲托管模型:保证基本Java类库不会被恶意代码任意覆盖,具体的内容能够参考我以前的文章网络

 

  •  类文件校验器;

  类文件的校验通常有四个步骤:编程语言

  1. Class文件的结构验证;
  2. 类型数据的语义检查(包括具体的操做码,操做数);
  3. 字节码的验证(例如程序的可停机性,操做码的合法性);
  4. 符号引用的验证(过程当中还包括了装载引用外部类,符号替换,连接过程的二进制兼容性判断)。

 

  • 内置的安全特性;

  包括了以下几个方面:编码

  1. 类型安全的引用转换;
  2. 结构化内存访问(屏蔽指针操做);
  3. 自动垃圾回收;
  4. 数组边界检测;
  5. 空引用检查。

 

  • 安全管理器与Java API。

  检测Java虚拟机堆外部资源访问的合法性,即界定沙盒的边界。不会被默认设置,若是须要检测在编码中须要自行编写。参见Java.lang.SecurityManager下的一系列以“check”开头的方法。操作系统

相关文章
相关标签/搜索