组成Java沙箱的基本组件如下:
·类加载体系结构
·class文件检验器
·内置于Java虚拟机(及语言)的安全特性
·安全管理器及Java API
Java安全模型的前三个部分——类加载体系结构、class文件检验器、Java虚拟机(及语言)的安全特性一起达到一个共同的目的:保持Java虚拟 机的实例和它正在运行的应用程序的内部完整性,使得它们不被下载的恶意代码或有漏洞的代码侵犯。相反,这个安全模型的第四个组成部分是安全管理器,它主要 用于保护虚拟机的外部资源不被虚拟机内运行的恶意或有漏洞的代码侵犯。这个安全管理器是一个单独的对象,在运行的Java虚拟机中,它在对于外部资源的访 问控制起中枢作用。
类加载体系结构
类加载器要加载一个类,它首先检查此类是否已被加载,然后再委托双亲加载器加载此类,它的双亲加载器再委托它的双亲,这样一直委托到启动加载器,启动加载 器在从核心API查找此类,如果有就返回此类,否则就他的子加载器就查找此类,如果都没有就抛出ClassNotFound的异常。如下图所示:
这种委托双亲的模式好处是:启动类加载器可以抢在标准扩展类装载器之前去装载类,而标准扩展类装载器可以抢在类路径加载器之前去装载那个类,类路径装载 器又可以抢在自定义类加载器之前去加载它。所以Java虚拟机先从最可信的Java核心API查找类型,这是为了防止不可靠的类扮演被信任的类,试想一 下,网络上有个名叫java.lang.Integer的类,它是某个黑客为了想混进java.lang包所起的名字,实际上里面含有恶意代码,但是这种 伎俩在双亲模式加载体系结构下是行不通的,因为网络类加载器在加载它的时候,它首先调用双亲类加载器,这样一直向上委托,直到启动类加载器,而启动类加载 器在核心Java API里发现了这个名字的类,所以它就直接加载Java核心API的java.lang.Integer类,然后将这个类返回,所以自始自终网络上的 java.lang.Integer的类是不会被加载的。
但是如果这个移动代码不是去试图替换一个被信任的类(就是前面说的那种情况),而是想在一个被信任的包中插入一个全新的类型,情况会怎样呢?比如一个名为 java.lang.Virus的类,经过双亲委托模式,最终类装载器试图从网络上下载这个类,因为网络类装载器的双亲们都没有这个类(当然没有了,因为 是病毒嘛)。假设成功下载了这个类,那你肯定会想,Virus和lang下的其他类痛在java.lang包下,暗示这个类是Java API的一部分,那么是不是也拥有修改Java.lang包中数据的权限呢?答案当然不是,因为要取得访问和修改java.lang包中的权 限,java.lang.Virus和java.lang下其他类必须是属于同一个运行时包的,什么是运行时包?运行时包是指由同一个类装载器装载的、属 于同一个包的、多个类型的集合。考虑一下,java.lang.Virus和java.lang其他类是同一个类装载器装载的吗?不是 的!java.lang.Virus是由网络类装载器装载的!
class文件校验器,通过四趟扫描,保证了class文件正确
第一趟是,检查class文件的结构是否正确。比较典型的就是,检查class文件是否以魔数OxCAFEBABE打头。
通过这趟检查,可以过滤掉大部分可能损坏的,或者压根就不是class的文件,来冒充装载。
第二趟是,检查它是否符合java语言特性里的编译规则。比如发现一个类的超类不是Object,就抛出异常。
第三趟是,检查字节码是否能被JVM安全的执行,而不会导致JVM崩溃。这里提到了一个停机的问题。内容是这样的,“即不可能写出一个程序,用它来判定作为其输入而读入的某个程序,是否会停机”。意思是,不可能写一个程序,让它告诉你,另外一个程序会不会中断或崩溃。
第四趟是,符号引用验证。一个类文件,它会包含它引用的其他类的全名和描述符,并跟他们建立符号引用(一种虚拟的,非物理连接的方式)。当程序第一次执行到需要符号引用的位置时,jvm会检查这个符号链接的正确性,然后建立真正的物理引用(直接引用)。
内置于Java虚拟机(及语言)的安全特性
这些都是基础的java语言特性,他们降低了java程序出现内存混乱,崩溃的几率。
·结构化内存访问(不使用指针,一定程度上让黑客无法篡改内存数据)
·自动垃圾收集
·数组边界检查
·空引用检查
·数据类型安全
安全管理器及Java API
这是安全沙箱中,离我们程序员最接近的一环。
securityMananger,是一个api级别的,可自定义的安全策略管理器,它深入到java api中,在各处都可以见到它的身影。比如SecurityClassLoader。
默认情况下,java应用程序是不设置 securityManager 实例的(意味着不会起到安全检查),这个实例需要我们在程序启动时通过 System.setSecurityManager 来设置。
一般情况下,检查权限是,通过 SecurityManager.checkPermission(Permission perm) 来完成的。外部程序通过,创建Permission实例,传递给前面的check。
Permission是一个抽象类,需要继承它实现不同的权限验证,比如 FilePermission,代表对某个文件的读写权限。
new FilePermission("test.txt", "read")
相关推荐
Java的安全沙箱机制是确保Java应用程序能够在不损害系统安全的前提下运行的重要保障。本文将详细介绍Java沙箱模型的核心组成部分,并深入探讨类装载器、类文件校验器的作用及其在Java安全体系中的地位。 #### Java...
Java沙箱是一种安全机制,用于限制代码的执行权限,防止不受信任的代码损害系统。在Java应用程序中,尤其是Web应用和移动应用,沙箱限制了代码对敏感资源的访问,如文件系统、网络和操作系统API。然而,恶意代码可能...
最后,手册可能还会讨论一些高级主题,如Java沙箱机制、混淆和反混淆技巧,以及如何进行安全的代码审计和漏洞扫描。这些内容可以帮助开发者提升代码的隐蔽性和安全性,并检测出潜在的安全风险。 总之,《Java安全...
对于Java开发者来说,了解如何编写安全的代码、识别和防止代码注入攻击、理解Java沙箱机制以限制潜在恶意代码的执行,以及如何应用最新的安全补丁和更新都是非常关键的知识点。 压缩包内的"SCJP 6.rtf"文件名称表明...
7. **Java沙箱机制**:Java的沙箱环境限制了未签名或不受信任的代码执行的权限,防止其对系统造成破坏。 8. **安全编码实践**:避免SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)等常见攻击,需要开发者遵循良好...
由于Applet运行在用户的机器上,出于安全考虑,Java沙箱机制限制了其对本地资源的访问权限。因此,Applet可能无法执行某些需要高权限的操作,如读写文件或访问网络。 7. **替代技术**: 随着Web技术的发展,...
Java沙箱机制限制了Applet的权限,防止恶意代码对用户的系统造成损害。 10. **部署与嵌入**:将Applet游戏部署到网页上,需要用到HTML的标签,指定Applet的类名和参数。随着HTML5的普及,现代浏览器逐渐淘汰了对...
Java的安全机制是其独特优势之一,它通过一系列的内置安全特性确保了应用程序的稳定性和安全性。本文基于给定的文件信息,深入探讨Java安全机制的关键组成部分及其运作原理。 ### Java安全机制的体系结构 Java安全...
Java沙箱,正如标题“java-sandbox”所示,是一个安全的环境,用于实验和测试Core Java的相关特性。在计算机安全领域,沙箱是一种技术,它允许程序运行在受限制的环境中,防止它们对系统造成潜在的危害。对于Java,...
1. Java沙箱机制:理解Java的沙箱模型,防止恶意代码的执行。 2. 输入验证:强化输入验证,防止SQL注入、跨站脚本等常见攻击。 3. 安全编码实践:遵循最佳安全编码原则,减少程序中的安全漏洞。 综上所述,政企在...
在IT行业中,安全沙箱是一种重要的安全机制,用于限制应用程序的权限,防止它们对系统造成潜在的危害。在 Flash 技术中,安全沙箱的概念尤为关键,因为它允许 Flash 内容在网页上运行,同时限制了其对用户计算机的...
- **安全性保障**:通过沙箱机制等手段,JVM提供了强大的安全保护措施,防止恶意代码对系统的破坏。 #### 3. 类加载器(ClassLoader) 类加载器是JVM的重要组成部分之一,它负责将Java类加载到内存中,并对其进行...
Java通过沙箱模型实现了这一目标,该模型将代码限制在一个安全区域内运行,防止恶意代码访问敏感资源或执行危险操作。此外,Java还引入了签名机制来验证代码的身份和完整性,从而增强系统的安全性。 #### 四、Java...
安全沙箱是Flash Player为了防止恶意代码对用户的系统造成危害而实施的一种安全机制。它将Flash内容分为不同的沙箱,如本地沙箱、网络沙箱等,限制了不同沙箱之间的交互。对于Socket通信,AS中的Socket类只能连接到...
"Java生态圈沙箱逃逸实战"的主题聚焦于如何保护Java应用程序免受恶意攻击,以及攻击者如何尝试绕过安全机制进行沙箱逃逸。沙箱是一种安全机制,用于限制代码执行权限,防止不受信任的代码对系统造成破坏。 首先,...
# 基于Docker和Java的代码沙箱系统 ## 项目简介 本项目是一个基于Docker和Java的代码沙箱系统,旨在提供一个安全、隔离的环境来执行用户提交的代码。系统支持Java代码的编译和执行,并提供了多种安全机制来防止...
在Java EE中,沙箱机制主要体现在容器对应用程序的管理和控制上。容器是Java EE平台的核心组成部分,它负责加载、配置、运行和管理Java EE组件,如Servlet、EJB(Enterprise JavaBeans)、JMS(Java Message Service...
本文将详细介绍如何使用Java语言进行支付宝的沙箱测试,包括付款、交易查询、退款、退款查询以及交易关闭等操作,并讨论对账单下载的重要性和具体实现。 首先,我们需要理解“沙箱测试”是什么。沙箱环境是支付宝为...
为了保护云上的用户免受恶意攻击,如DDoS(分布式拒绝服务)和旁注攻击,SAE实施了一系列的安全限制,尤其是对于Java应用程序,它采用了安全沙箱机制来限制可能有害的函数调用。 Java的安全沙箱是一种机制,它允许...
Firehunter沙箱能够检测文件类型,包括Windows可执行文件、EXE、dll、WEB网页、Javascript、Flash、JavaApplet等各种办公文档、图片文件、压缩文件等。 Firehunter沙箱的智能行为综合分析包括:文件附加数据识别、...