`

java的沙箱模型

    博客分类:
  • java
 
阅读更多

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>

    <!--[if mso & !supportInlineShapes & supportFields]><span lang=EN-US style='mso-no-proof:yes'><span style='mso-element:field-begin; mso-field-lock:yes'></span> SHAPE <span style='mso-spacerun:yes'>&nbsp;</span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><!--[if gte vml 1]><v:rect id="矩形_x0020_1" o:spid="_x0000_s1026" alt="说明: http://zhaonjtu.iteye.com/blog/80647" style='width:237.75pt; height:175.9pt;visibility:visible;mso-wrap-style:square;mso-left-percent:-10001; mso-top-percent:-10001;mso-position-horizontal:absolute; mso-position-horizontal-relative:char;mso-position-vertical:absolute; mso-position-vertical-relative:line;mso-left-percent:-10001;mso-top-percent:-10001; v-text-anchor:top' o:gfxdata="UEsDBBQABgAIAAAAIQC2gziS/gAAAOEBAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbJSRQU7DMBBF 90jcwfIWJU67QAgl6YK0S0CoHGBkTxKLZGx5TGhvj5O2G0SRWNoz/78nu9wcxkFMGNg6quQqL6RA 0s5Y6ir5vt9lD1JwBDIwOMJKHpHlpr69KfdHjyxSmriSfYz+USnWPY7AufNIadK6MEJMx9ApD/oD OlTrorhX2lFEilmcO2RdNtjC5xDF9pCuTyYBB5bi6bQ4syoJ3g9WQ0ymaiLzg5KdCXlKLjvcW893 SUOqXwnz5DrgnHtJTxOsQfEKIT7DmDSUCaxw7Rqn8787ZsmRM9e2VmPeBN4uqYvTtW7jvijg9N/y JsXecLq0q+WD6m8AAAD//wMAUEsDBBQABgAIAAAAIQA4/SH/1gAAAJQBAAALAAAAX3JlbHMvLnJl bHOkkMFqwzAMhu+DvYPRfXGawxijTi+j0GvpHsDYimMaW0Yy2fr2M4PBMnrbUb/Q94l/f/hMi1qR JVI2sOt6UJgd+ZiDgffL8ekFlFSbvV0oo4EbChzGx4f9GRdb25HMsYhqlCwG5lrLq9biZkxWOiqY 22YiTra2kYMu1l1tQD30/bPm3wwYN0x18gb45AdQl1tp5j/sFB2T0FQ7R0nTNEV3j6o9feQzro1i OWA14Fm+Q8a1a8+Bvu/d/dMb2JY5uiPbhG/ktn4cqGU/er3pcvwCAAD//wMAUEsDBBQABgAIAAAA IQAYEiQk4AIAAOMFAAAOAAAAZHJzL2Uyb0RvYy54bWysVNuO0zAQfUfiHyy/p7k0vSTadLU0DUJa YKWFD3ATpzEkdrDdpl3EtyDxxkfwOYjfYOz0ussTkAfL9jhn5sycmavrbVOjDZWKCZ5gf+BhRHku CsZXCX7/LnOmGClNeEFqwWmCd1Th69nzZ1ddG9NAVKIuqEQAwlXctQmutG5j11V5RRuiBqKlHIyl kA3RcJQrt5CkA/SmdgPPG7udkEUrRU6Vgtu0N+KZxS9Lmuu3ZamoRnWCITZtV2nXpVnd2RWJV5K0 Fcv3YZC/iKIhjIPTI1RKNEFryZ5ANSyXQolSD3LRuKIsWU4tB2Dje4/Y3FekpZYLJEe1xzSp/web v9ncScQKqB1GnDRQol9fv//88Q3BuaAqh1zta/JQEcE/6PWAabqjNv5lLVbu1BuHE5PIrlUx4N23 d9KkQrW3Iv+oEBfzivAVvVEtlKN3dLiSUnQVJQUw8g2Ee4FhDgrQ0LJ7LQoIjay1sGnelrIxPiCB aGuruTtWk241yuFy6PlRGIwwysEWBMNhNLT1dkl8+L2VSr+kokFmk2AJ8Vl4srlV2oRD4sMT442L jNW1lUzNLy7gYX8DzuFXYzNhWAV8jrxoMV1MQycMxgsn9NLUucnmoTPO/MkoHabzeep/MX79MK5Y UVBu3BzU6IfHChy64o8i2vdFr6OjHpWoWWHgTEhKrpbzWqINgW7I7GeTDpbTM/cyDJsE4PKIkh+E 3osgcrLxdOKEWThyook3dSDlL6KxF0Zhml1SumWc/jsl1CU4GkFRLZ1T0I+4efZ7yo3EDYhXopo1 CZ4eH5HYaHDBC1taTVjd789SYcI/pQLKfSi0VawRaa//pSh2IFgpQE4wb2AywqYS8gGjDqZMgtWn NZEUo/oVB9FHfhiasWQP4WgSwEGeW5bnFsJzgEqwxqjfznU/ytatZKsKPPk2MVzcQKOUzErYNFEf 1b69YJJYJvupZ0bV+dm+Os3m2W8AAAD//wMAUEsDBBQABgAIAAAAIQAZjXEr3gAAAAUBAAAPAAAA ZHJzL2Rvd25yZXYueG1sTI9BS8NAEIXvQv/DMoIXsZuq0RIzKVIQiwilqfa8zY5JaHY2zW6T+O9d e9HLwOM93vsmXYymET11rraMMJtGIIgLq2suET62LzdzEM4r1qqxTAjf5GCRTS5SlWg78Ib63Jci lLBLFELlfZtI6YqKjHJT2xIH78t2Rvkgu1LqTg2h3DTyNooepFE1h4VKtbSsqDjkJ4MwFOt+t31/ levr3crycXVc5p9viFeX4/MTCE+j/wvDL35Ahyww7e2JtRMNQnjEn2/w7h/jGMQe4S6ezUFmqfxP n/0AAAD//wMAUEsBAi0AFAAGAAgAAAAhALaDOJL+AAAA4QEAABMAAAAAAAAAAAAAAAAAAAAAAFtD b250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAAACEAOP0h/9YAAACUAQAACwAAAAAAAAAAAAAA AAAvAQAAX3JlbHMvLnJlbHNQSwECLQAUAAYACAAAACEAGBIkJOACAADjBQAADgAAAAAAAAAAAAAA AAAuAgAAZHJzL2Uyb0RvYy54bWxQSwECLQAUAAYACAAAACEAGY1xK94AAAAFAQAADwAAAAAAAAAA AAAAAAA6BQAAZHJzL2Rvd25yZXYueG1sUEsFBgAAAAAEAAQA8wAAAEUGAAAAAA== " filled="f" stroked="f"> <o:lock v:ext="edit" aspectratio="t" /> <w:wrap type="none" /> <w:anchorlock /> </v:rect><![endif]--><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><![endif]--><!--[if mso & !supportInlineShapes & supportFields]><span lang=EN-US style='mso-no-proof:yes'><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:237.75pt;height:175.9pt'> <v:imagedata croptop="-65520f" cropbottom="65520f" /> </v:shape><span style='mso-element:field-end'></span></span><![endif]--><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.hackerjava.lang中的其他类型属于同一个运行时包的,因此没有访问权限。<o:p></o:p>

     说到这里也许会想,我要是修改java核心库是不是就可以瞒天过海了,当然可以了。但是java安全还有其他的机制去防范,但是也注意这仅仅是机制,你死活要主动的破坏也不是不可能。<o:p></o:p>

     注:绝大部分内容来自《深入java虚拟机》,书上只讲这么多,我也只知道这么多,希望抛砖引玉。<o:p></o:p>

 

分享到:
评论

相关推荐

    基于沙箱的Java安全体系结构

    本文将详细介绍Java沙箱模型的核心组成部分,并深入探讨类装载器、类文件校验器的作用及其在Java安全体系中的地位。 #### Java沙箱模型的组成 Java沙箱模型主要由以下几个部分组成: 1. **类装载器**:负责加载类...

    实例分析JVM安全体系双亲委派命名空间保护域策略Java开

    Java沙箱模型是一种安全机制,它限制了未经验证的代码(如网络下载的Applet)的权限,确保这些代码不能破坏系统或访问敏感数据。通过权限管理和安全管理器,开发者可以控制不同代码执行时的权限级别。 总结来说,...

    java平台安全技术研究(PDF格式)

    Java沙箱模型是一种限制代码执行权限的机制,使得未经认证的代码只能在特定的环境中运行,不能访问系统资源,如文件系统、网络或硬件设备。这种模型通过类加载器和安全策略来实现,有效地隔离了不受信任的代码,防止...

    行业分类-设备装置-基于JAVA字节码插桩和JAVA方法挂钩检测JAVA沙箱逃逸攻击.zip

    Java沙箱逃逸攻击是指恶意代码试图突破Java安全模型的限制,获取系统级权限或执行非授权操作的行为。为了防止这种攻击,开发者可以利用Java字节码插桩和方法挂钩技术来增强应用的安全性。本文将深入探讨这两种技术...

    java和as3 socket通信 解决安全沙箱问题

    首先,我们需要了解AS3的安全沙箱模型。AS3的沙箱分为三类:本地信任的沙箱(Local-with-Files)、网络沙箱(Network)和本地无限制沙箱(Local-trusted)。默认情况下,AS3代码运行在网络沙箱中,对网络访问有一定...

    Java安全学习项目.zip

    8. **Java沙箱模型**:Java虚拟机(JVM)的沙箱模型限制了未经许可的代码执行某些操作,如文件系统访问、网络通信等,保护主机系统免受攻击。 9. **安全Manager**:Java Security Manager可以设定安全策略,限制...

    javaApplet 实例入门教程

    由于Applet运行在用户的机器上,为了安全考虑,Java沙箱模型对Applet施加了一些限制,比如无法直接访问本地文件系统或网络资源,除非获取了用户的明确许可。 8. **Applet与Java Web Start** 随着Java Web Start的...

    Java语言Applet编程技术.

    - 由于Applet是在用户机器上运行,因此出于安全考虑,Java沙箱模型对Applet施加了限制,如访问文件系统和网络的权限。 - 如果需要更多的权限,可以使用签名的Applet,但必须谨慎处理,因为这可能会带来潜在的安全...

    100-java-applet-example.zip_Java example

    7. **安全限制**:由于Applet是在客户端运行,出于安全考虑,Java沙箱模型对Applet施加了严格的限制,例如不能访问本地文件系统,这需要开发者了解如何在受限环境中编写代码。 8. **现代替代技术**:虽然Java ...

    Java编程经典——2010新版Java教程

    10. **Java安全技术**:了解Java沙箱模型、数字签名和加密算法,确保应用程序的安全性。 11. **Java网络技术**:深入研究Java的网络编程,包括TCP/IP协议的使用、Socket编程和HTTP请求的处理。 12. **Servlet技术**...

    JAVA技术帮助文档

    此外,Java沙箱模型为运行不可信代码提供了一个安全环境。 #### 结构中立 Java不依赖于特定的硬件架构,这意味着它可以运行在各种不同的处理器上。这一点对于Java能够成为一个真正的跨平台语言至关重要。 #### 可...

    java的小程序以APPLET显示

    4. **Applet的安全限制**:由于Applet运行在用户机器上,为了安全,Java沙箱模型对Applet施加了一些限制,如无法访问本地文件系统、网络通信限制等。 5. **Applet的缺点与替代**:虽然Applet提供了跨平台的交互性,...

    java学习之路doc

    例如,Java沙箱模型可以限制应用程序访问系统资源,从而保护用户的计算机免受潜在的威胁。 ### Java基础知识 #### 基本数据类型 Java提供了八种基本数据类型:`byte`、`short`、`int`、`long`、`float`、`double`...

    java入门知识

    例如,Java沙箱模型限制了程序的执行权限,防止其访问敏感资源。 4. **垃圾回收机制**:Java自动管理内存,避免了程序员手动释放内存而导致的内存泄漏问题,提高了程序的稳定性和可靠性。 #### 四、Java虚拟机(JVM...

    Java Applet实例讲解,还有丰富实例,有趣味,更易学!

    7. **Applet的安全限制**:由于Applet在客户端运行,为了安全考虑,Java沙箱模型限制了Applet访问本地文件系统、网络和系统资源的能力。如果需要额外权限,可以使用Signed Applet。 8. **替代技术**:虽然Java ...

    S1试 题

    1. **Java沙箱模型**:Java的运行环境使用沙箱模型来限制代码的权限,防止恶意代码对系统造成破坏。这是Java平台安全性的重要基础。 2. **类加载器**:Java程序的执行依赖于类加载器,它们负责加载类文件并确保不同...

    java ,c#,delphi 解决flash安全沙箱问题

    首先,让我们深入了解一下 Flash 的安全沙箱模型。Flash 分为三个主要的安全沙箱:浏览器沙箱、本地-with-网络沙箱和本地-without-网络沙箱。浏览器沙箱是最严格的,只允许 Flash 内容与同一域名的资源交互;本地-...

    基于Spring Cloud、RabbitMQ和Docker的Java在线判题系统代码沙箱设计源码

    该项目是一款基于Spring Cloud微服务架构、RabbitMQ消息队列和Docker容器技术的Java在线判题系统代码沙箱源码,包含30个文件,其中18个为Java源文件,7个为XML配置文件,1个为Git忽略文件,以及少量HTML和Markdown...

    Java安全技术.pptx

    Java 安全模型的演化经历了从沙箱模型到 Java2 安全模型的发展。沙箱模型将远程代码和本地代码分离,限制远程代码的访问权限,保护系统的安全。 Java2 安全模型引入了数字签名服务,允许可信的 Applet 获得更多的...

    Applet.rar_Java编程_Java_

    4. **Applet的安全限制**:由于Applet在客户端运行,为了安全考虑,Java沙箱模型限制了Applet的权限,例如不能直接访问本地文件系统或网络资源,除非特别签名授权。 5. **Applet与HTML的交互**:通过`...

Global site tag (gtag.js) - Google Analytics