`

java虚拟机内置的安全特性

    博客分类:
  • jvm
 
阅读更多

java虚拟机在执行字节码时还进行其他一些内置的安全机制的操作。

1.类型安全的引用转换

2.结构化的内存访问(无指针算法)

3.自动化垃圾收集(不必显式地释放被分配的内存)

4.数组边界检查

5.空引用检查

 

java程序只能使用类型安全,结构化的方法去访问内存

这样可以避免黑客知道一个类装载器在内存中的位置,赋予一个指针指向那块内存,从而对类装载器的数据进行操作,而达到破坏安全系统的目的。


未指明运行时数据空间在java虚拟机内部是怎样分布的

运行时数据空间是指一些java虚拟机用来存储一个运行时java程序所需的内存空间。包括:java栈(每个线程一个),一个存储字节码的方法区,以及一个垃圾收集堆(用来存储由运行的程序创建的对象)。java虚拟机规范并未决定使用什么数据结构来表示运行时的数据空间,并且存放在内存中的哪个位置。这样,黑客就不能够凭借class文件中的内容,知道内存中数据的内存布局。这样,即使能够突破java虚拟机的内存访问限制,也会无法找到他们想找到的内容。但是可以使用本地方法来达到破坏内存的目的。


异常的结构化错误处理

当一个违反安全的行为发生时,java虚拟机会做一些异常的结构化处理,java虚拟机将抛出一个异常或者错误,而不是崩溃。这个异常或者错误将导致这个线程死亡,而不是整个系统陷入瘫痪。异常机制使程序能够将控制从发生异常的地方转到处理这个异常的情况。

 

安全管理器和java api

java安全模型的前三个组成部分-类装载器体系结构,class文件检验器和java内置的安全特性一起达到一个共同的目的:

保持java虚拟机实例和它正在运行的应用程序的内部完整性,使得它们不受恶意或者有漏洞的代码侵犯。

 

java安全模型的第四部分:安全管理器:主要用于保护虚拟机的外部资源不被虚拟机内运行的文件或者有漏洞的代码侵犯。

安全管理器是一个单独的对象,在运行的java虚拟机中,它在访问控制--对于外部资源的访问控制--中起中枢作用。

 

安全管理器负责两个方面的工作:

1)说明一个安全策略

2)执行这个安全策略

 

java安全模型的不足

无法阻止恶意移动代码不断分配内存直到内存耗尽

无法阻止恶意代码不断生成线程

 

其实不仅是恶意代码,我们自己写代码的时候也要避免不断分配内存和不断生成线程的现象的产生。

分享到:
评论

相关推荐

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    3.5 java虚拟机中内置的安全特性 3.6 安全管理器和java api 3.7 代码签名和认证 3.8 一个代码签名示例 3.9 策略 3.10 保护域 3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3...

    深入Java虚拟机

    3.5 Java虚拟机中内置的安全特性 3.6 安全管理器和Java API 3.7 代码签名和认证 3.8 一个代码签名示例 3.9 策略 3.10 保护域 3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3...

    深入java虚拟机第二版

    3.5 Java虚拟机中内置的安全特性 3.6 安全管理器和Java API 3.7 代码签名和认证 3.8 一个代码签名示例 3.9 策略 3.10 保护域 3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3 一个回答...

    深入JAVA虚拟机(第2版)

    3.5 Java虚拟机中内置的安全特性 3.6 安全管理器和Java API 3.7 代码签名和认证 3.8 一个代码签名示例 3.9 策略 3.10 保护域 3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 ...

    Java超全的基础面试题

    3.Java虚拟机 4.数据库 5.计算机网络 6.数据结构 7.操作系统 对于Java后端的朋友来说应该是最全面最完整的面试备战题,为了更好地整理每个模块,力求不漏掉每一个知识点,希望也能帮助到你。 一、Java语言具有...

    Java数组使用的例子

    Java数组在Java虚拟机(JVM)和Java类库中是一个内置的数据结构,因此其源代码并不直接存在于Java的源代码库中。然而,你可以通过Java的API文档来理解数组的行为和特性。 在Java中,数组是一个对象,它保存了一个...

    java多线程作业.docx

    Java语言的一大特性点就是内置对多线程的支持。...为了建立这些线程正在同步执行的感觉,Java虚拟机快速地把控制从一个线程切换到另一个线程。这些线程将被轮流执行,使得每个线程都有机会使用CPU资源。

    基于JAVA的学生通讯录管理系统设计和实现[文献综述].doc

    (一)平台架构 Java平台由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Applicat ion Programming Interface、简称API)构成。Java应用编程接口为Java应用提供了一 个独立于操作系统的标准接口,可...

    Java面试技术面知识扩展包第三弹.rar

    它的程序可以在不同操作系统上运行,只需在目标平台上安装对应的Java虚拟机(JVM),而无需修改代码。 3. 自动内存管理:Java使用垃圾收集器(Garbage Collector)自动管理内存。开发者不需要手动进行内存分配和...

    Java面试技术面知识扩展包第二弹.rar

    它的程序可以在不同操作系统上运行,只需在目标平台上安装对应的Java虚拟机(JVM),而无需修改代码。 3. 自动内存管理:Java使用垃圾收集器(Garbage Collector)自动管理内存。开发者不需要手动进行内存分配和...

    多基础算法集合(Java)。.zip

    这得益于Java虚拟机(JVM),它充当了代码和底层硬件之间的中介。 面向对象: Java是一种纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的概念。这使得Java编写的代码更加模块化、可维护和可扩展。 多...

    java基础案例与开发详解案例源码全

    2.5 Java虚拟机简介28 2.6 Java技术两种核心运行机制29 2.7 上机练习30 第3章 3.1 变量32 3.1.1 什么是变量32 3.1.2 为什么需要变量32 3.1.3 变量的声明和赋值33 3.1.4 变量应用实例33 3.2 数据的分类34 3.2.1 Java...

    Java程序员面试宝典

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 booleanBoolean charCharacter byteByte shortShort ...

    Java语言基础下载

    Java虚拟机 4 类加载器 6 Windows环境变量 8 内容总结 13 独立实践 14 第二章: 面向对象概述 15 学习目标 15 面向对象(Object Oriented) 16 面向对象的主要特性 18 抽象(Abstraction) 18 封装(Encapsulation): 19 ...

    JAVA面试题最全集

    35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有...

    java面试笔试题大汇总

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter ...

    java 面试题 总结

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byte...

    积分java源码-Revature-Online-JAVA-Class-Repository:Revature-Online-JAVA-Cla

    虚拟机 (JVM) 将解释这个字节码并基本上运行程序。 强类型:声明为某种类型的变量只能分配给它相同类型的值 好处 平台无关(一次编写,随处运行) C 语言启发式语法 自动内存管理:在垃圾收集器的帮助下完成 广泛的...

    超级有影响力霸气的Java面试题大全文档

     Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character ...

    java面试题

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byte...

Global site tag (gtag.js) - Google Analytics