java的沙箱模型就是指java的安全模型,沙箱模型允许你下载一些不可靠站点的代码,但是沙箱模型会限制它们对系统的破坏。究竟java沙箱是怎么做到这一点的呢,我们来看看java沙箱的基本组件。
类装载器结构
class文件检验器
java虚拟机的安全特性
安全管理器和Java API
这些组件列出的顺序其实也是java沙箱安全模型进行安全措施的步骤。(当然,这其中的类装载器和安全管理器是可以定制的)<o:p></o:p>
类加载器:<o:p></o:p>
java程序运行的第一步就是通过类加载器加载class文件。
有几点规则要事先说明:<o:p></o:p>
规则1.在java虚拟机中,在同一个命名空间内的类可以直接进行交互,而不同命名空间的类甚至不能觉察到彼此的存在。<o:p></o:p>
规则2.从1.2开始,除启动类装载器以外的每一个类装载器,都有一个“双亲”类装载器,在某个特定的类装载器试图以常用方式装载类以前,它都会默认的把这个任务委派给它的双亲-请求它的双亲去装载这个类,如果它的双亲没有能力转载,则只能试图自己去装载这个类。<o:p></o:p>
我们来举一个例子来描述类的加载过程。<o:p></o:p>
<o:p></o:p>
假设网络类加载器发出一个转载Volcano类的请求,按照规则2 Volcano的加载会一直逐步委派到启动加载器,但是Volcano不是核心API,因此Volcano的加载的任务会再次让网络类加载器去加载,假设通过网络正确的下载了Volanno类,这样Volcano类会在以后的执行过程中会被使用。<o:p></o:p>
我们再进一步假设Volcano类有一个方法被调用,方法引用了java.util.HashMap,由于是第一次引用,虚拟机会请求装载Volcano的类装载器去转载,同样通过规则会让启动类加载器去加载这个HashMap类。<o:p></o:p>
从上述的过程我们可以得出:<o:p></o:p>
1.假如我们自己编写了一个java.util.HashMap的类,它是不可能被加载的,即便是一个病毒去伪装成java.util.HashMap,还是没法用,原因很简单,类加载器总是去加载真正的核心API中的HashMap。<o:p></o:p>
你也许会想能不能在把HashMap加载后我再用假的去替换这个真的HashMap,呵呵,当然可以,前提是你要知道虚拟机的设计,这样才能知道存放HashMap存放的地址,这一点也是java结构化内存操作的安全性考虑。<o:p></o:p>
我们继续Volcano类的调用,聪明的黑客或许会想到如何利用规则1伪装一个具有访问权限的类,比如java.lang.hacker,这个hacker按照规则1可是拥有访问java.lang包中的任何权限的啊,好可怕。<o:p></o:p>
规则三:Java虚拟机只把特殊访问的权限授予由同一个类加载器装载的同一个包中的类,即他们属于同一个“运行时包”。“运行时包”这个是在java 虚拟机第二版规范中第一次提出,它指由同一个类型加载器转载的,属于同一个包的,多个类型的集合。<o:p></o:p>
很显然java.lang.hacker和java.lang中的其他类型属于同一个运行时包的,因此没有访问权限。<o:p></o:p>
说到这里也许会想,我要是修改java核心库是不是就可以瞒天过海了,当然可以了。但是java安全还有其他的机制去防范,但是也注意这仅仅是机制,你死活要主动的破坏也不是不可能。<o:p></o:p>
注:绝大部分内容来自《深入java虚拟机》,书上只讲这么多,我也只知道这么多,希望抛砖引玉。<o:p></o:p>
<o:p> </o:p>
分享到:
- 2007-05-17 17:27
- 浏览 3368
- 评论(1)
- 论坛回复 / 浏览 (1 / 2729)
- 查看更多
相关推荐
Java类加载器是Java虚拟机(JVM)的关键组成部分,它负责查找并加载类到内存中,使得程序能够运行。自定义Java类加载器允许我们根据特定需求扩展默认的加载机制,例如,从非标准位置加载类或者实现动态加载。在Java...
- Java中的类加载器采用双亲委派模型,即一个类首先由启动类加载器Bootstrap ClassLoader尝试加载,如果找不到则交给扩展类加载器Extension ClassLoader,再找不到则交由应用程序类加载器AppClassLoader,最后如果...
类文件校验器是Java沙箱安全机制中的另一个重要组件,它的作用是对加载到JVM中的类文件进行校验,确保它们符合Java语言规范,且不会导致系统不稳定或出现安全漏洞。具体而言,类文件校验器的工作分为四步: 1. **...
逃逸对抗技术(也称为沙箱反逃逸技术)旨在模拟真实的运行环境,使恶意程序无法察觉其处于沙箱之中。这包括模拟硬件环境、系统时间、用户行为以及处理特定的CPU指令。通过这种方式,逃逸对抗技术能够诱使恶意代码...
- 安全性和隔离性需求,例如在不同类加载器之间加载相同的类以实现沙箱效应。 - 性能优化,例如缓存已加载的类以减少重复加载的时间开销。 **示例:** 为了演示如何创建自定义类加载器,考虑以下简单示例: ```java...
然而,恶意代码可能会尝试利用各种漏洞来绕过这些限制,比如通过篡改类加载器、滥用反射、注入恶意代理类等方式实现沙箱逃逸。 面对这样的威胁,开发者需要在设计和实现阶段就充分考虑安全因素,利用字节码插桩和...
Java虚拟机(JVM)的类加载器子系统是Java运行时环境的一个重要组成部分,它负责将.class文件加载到内存中,并生成对应的Java类对象。这一过程涵盖了从文件系统或网络获取.class文件、验证类文件的正确性、准备类...
3. **URLClassLoader**: 这是Java标准库中的一个类加载器,它可以从指定的URL加载类。通过创建`URLClassLoader`实例并传入包含源码或编译后类的目录或JAR文件的URL,可以在运行时加载新编译的类。 4. **反射...
AS3的沙箱分为三类:本地信任的沙箱(Local-with-Files)、网络沙箱(Network)和本地无限制沙箱(Local-trusted)。默认情况下,AS3代码运行在网络沙箱中,对网络访问有一定的限制。为了允许AS3应用与不同域的...
- 动态加载的类可以实现沙箱安全,通过限制类加载器的权限,防止恶意代码执行。 - 不同的类加载器加载的类被视为不同的类,这允许在同一个JVM中加载不同版本的同一类,实现版本隔离。 6. **优化和性能** - 为了...
2. 创建GroovyClassLoader:使用这个类加载器可以动态加载和执行Groovy脚本。它继承自Java的ClassLoader,能解析Groovy源码并生成字节码。 3. 加载并执行Groovy脚本:通过GroovyClassLoader的`parseClass()`方法...
Java实现支付宝扫码支付完整过程(沙箱测试环境)及其项目源码 项目描述 最近想开发一个关于支付网页的小项目,记录一下自己碰到的坑,这里我是通过Java在支付宝测试环境里面实现支付宝支付完整过程。 运行环境 ...
对于Java,这样的沙箱尤其重要,因为它是一个面向对象的编程语言,其特性如反射、动态代理和类加载器等,如果使用不当,可能会带来安全风险。 在Java-sandbox中,我们可以进行以下几方面的学习和实践: 1. 类与...
【Java支付宝沙箱教程】 Java支付宝沙箱教程主要讲解如何在SpringBoot框架中集成和测试支付宝的支付功能,通过模拟真实支付环境,确保在不影响实际生产环境的情况下进行开发和调试。 1. **支付宝沙箱环境** - **...
当我们面临“Java, C#, Delphi 解决 Flash 安全沙箱问题”的场景时,这意味着我们需要在这些编程语言中处理与 Flash 沙箱相关的安全问题,以确保应用程序的安全性和合规性。 首先,让我们深入了解一下 Flash 的安全...
在IT行业中,网络通信是应用程序之间交互的重要方式之一。在这个场景中,我们关注的是ActionScript(AS)与Java之间的Socket通信,以及如何在面临安全沙箱限制时找到解决方案。Socket编程是实现客户端-服务器通信的...
- **类加载器(ClassLoader)**:负责加载类文件到JVM中。 - **字节码校验器**:检查字节码的正确性和安全性。 - **解释执行器**:逐行解释执行字节码。 2. **安全健壮** - Java设计了许多安全特性来确保应用...
然而,Flash在安全方面存在一些重要概念,其中之一就是“沙箱”机制。本篇文章将详细探讨“Flash加载SWF文件的沙箱问题”,并结合标签“源码”和“工具”来深入理解这个问题。 Flash Player为了确保用户的安全,...
这个资源包,"java沙箱支付宝支付,QQ邮箱发送,短信发送,语音播报,手机短信发送等功能jar以及源码",正是这样一个集合,提供了Java开发者所需要的关键组件,涵盖了支付处理、通信和通知等多个领域。以下将对这些功能...