java------沙箱安全机制

简介: java------沙箱安全机制

沙箱安全机制:

Java安全模型的核心就是Java沙箱(Sandbox),什么是沙箱?沙箱是一个限制程序运行的环境


沙箱机制就是将Java代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有限隔离,防止对本地系统造成破坏,沙箱主要限制系统资源访问,那系统资源包括什么?CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。


所有的Java程序运行都可以指定沙箱,可以定制安全策略。


沙箱机制的进化:

在java中将执行程序分为本地代码和远程代码两种,本地代码默认视为可信任的,而远程代码则被看做是不受信任的,对于授信的本地代码,可以访问一切本地资源,而对于非授信的远程代码早期的java实现中,安全依赖于沙箱机制。

下图为:JDK1.0安全模式

但如此严格的安全机制也给程序的功能拓展带来障碍,比如:当前用户希望远程代码访问本地系统的文件时,就无法实现,因此在后续的java1.1版本中,针对安全机制做出了改进,增加了安全策略,允许用户指定代码对本地资源的访问权限。

下图为:JDK1.1安全模式:

java1.2版本中,再次改进了安全机制,增加了代码签名,不论本地代码或是远程代码,都会按照用户的安全策略设定,由类加载器加载度到虚拟机中权限不同的运行空间,来实现差异化的代码执行权限控制。

下图为:JDK1.2安全模式:


当前最新的安全机制实现,则引入了域的概念,虚拟机会把所有代码加载到不同的系统域和应用域,系统域部分专门负责与关键资源交互,而各个应用域部分则通过系统域的部分代理来对各种需要的资源进行访问,虚拟机中不同的受保护域,对应不一样的权限,存在于不同域中的类文件就具有了当前的全部权限。


下图为:JDK1.6[最新的]安全模式:

组成沙箱的基本组件:

字节码校验器 (bytecode verifier):

确保java类文件遵循java语言规范。这样可以帮助java程序实现内存保护。但并不是所有的类文件都会经过字节码校验,比如核心类。

类装载器 (class loader) :


其中类装载器在3个方面对Java沙箱起作用:

  它防止恶意代码去干涉善意的代码;//双亲委派机制的应用体现++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  它守护了被信任的类库边界
  它将代码归入保护域,确定了代码可以进行哪些操作

虚拟机为不同的类加载器载入的类提供不同的命名空间,命名空间由一系列唯一的名称组成,每一个被装载的类将有一个名字,这个命名空间是由Java虚拟机为每一个类装载器维护的,它们互相之间甚至不可见。


类装载器采用的机制是双亲委派模式


1.从最内层JVM自带类加载器开始加载,外层恶意同名类得不到加载从而无法使用;


2.由于严格通过包来区分了访问域,外层恶意的类通过内置代码也无法获得权限访问到内层类,破坏代码就自然无法生效。


存取控制器(access controller) :

存取控制器可以控制核心API对操作系统的存取权限,而这个控制的策略设定,可以由用户指定。


安全管理器 (security manager) :

是核心API和操作系统之间的主要接口。实现权限控制,比存取控制器优先级高。

安全软件包 (security package) :

java.security下的类和扩展包下的类,允许用户为自己的应用增加新的安全特性,包括:

a.安全提供者
b.消息摘要
c.数字签名
d.加密
e.鉴别
相关文章
|
24天前
|
安全 Java
深入Java并发编程:线程同步与互斥机制
【4月更文挑战第6天】Java并发编程中,确保数据一致性与防止条件竞争是关键。语言提供`synchronized`关键字、`Lock`接口和原子变量等机制处理并发问题。线程同步问题包括竞态条件、死锁和活锁。`synchronized`实现内置锁,`Lock`接口提供更灵活的锁管理,原子变量则支持无锁安全操作。理解并恰当使用这些工具能有效管理并发,避免数据不一致。
|
2月前
|
Java
Java并发编程中的锁机制
【2月更文挑战第22天】 在Java并发编程中,锁机制是一种重要的同步手段,用于保证多个线程在访问共享资源时的安全性。本文将介绍Java锁机制的基本概念、种类以及使用方法,帮助读者深入理解并发编程中的锁机制。
|
2月前
|
Java 程序员
Java中的异常处理机制
【2月更文挑战第22天】在Java编程中,异常处理是一个重要的概念。它允许程序员在程序执行过程中遇到错误时,对错误进行处理,而不是让程序崩溃。本文将介绍Java中的异常处理机制,包括异常的分类、如何捕获和处理异常以及自定义异常等内容。
|
2月前
|
存储 Java 数据库
|
2月前
|
Java
深入了解Java中的锁机制
深入了解Java中的锁机制
|
2月前
|
开发框架 Java API
java反射机制的原理与简单使用
java反射机制的原理与简单使用
17 1
|
3天前
|
Java
【专栏】Java中的反射机制与应用实例
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
2月前
|
存储 安全 Java
【深度挖掘Java并发编程底层源码】「底层技术原理体系」带你零基础认识和分析学习相关的异步任务提交机制FutureTask的底层原理
【深度挖掘Java并发编程底层源码】「底层技术原理体系」带你零基础认识和分析学习相关的异步任务提交机制FutureTask的底层原理
14 0
|
1天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发
|
3天前
|
安全 Java
【JAVA】Java并发编程中的锁升级机制
【JAVA】Java并发编程中的锁升级机制