`
andyliuxs
  • 浏览: 136800 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java的沙箱机制

阅读更多
0 Java安全体系概述
    从JDK 1.0开始Java就实现了一套安全架构,主要用于Applet. 在这种体系下Java Code的执行环境被严格划分为两个部分,本地代码可以访问计算机的所有资源,而远端代码(Romote Code: 主要是Applet)只能运行在严格限制的沙箱里面.安全管理器(Security Manager)作为一个子系统来决定哪些资源允许沙箱中的程序访问.
    JDK 1.1引入了"签名Applet"的概念,一个被信任签名的Applet被当作和本地代码具有同等权限,可以访问全部的本地资源.
    JDK 1.2做了很多改进.首先,无论本地代码还是远端代码(remote code)现在都服从于安全策略.安全策略为各种签名者和来源定义了一组许可(permission),可以由用户和系统管理员来配置各种许可.每个许可(permission)指定允许访问只用特定的资源,例如读或写一个特定的文件/目录或者可以连接到指定的地址和端口...
    运行时系统将代码组织为不同的域(domain),每个域对应一组许可,在这个域中的类的实例都受这个域指定的许可的限制.
   
1. 控制你的Application
首先要明确的是,本地应用程序运行的时候,安全管理器(security manager)并没有被安装.所以,对于应用程序来说,默认是可以访问所有的资源,这一点和Applet不同.要启动安全管理器就是在启动命令行加上 -Djava.security.manager.默认加载的系统策略文件授予了所有代码访问一些通用属性的许可.这个文件是${jre_home}\lib\security\java.policy.在命令行上给定 -Djava.security.manager 启动应用程序,系统会首先加载${jre_home}\lib\security\java.security 在这个文件中搜索policy.url可以看到如下的两行
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
在这两行加载了默认的策略文件,我们也可以编辑自己的策略文件然后添加到java.security中使应用程序应用我们的安全策略.除此以外还有另一种指定我们自己的安全策略文件的方法,就是在命令行上使用 -Djava.security.policy=mypolicy 选项.
    如果熟悉策略文件的语法,可以自己用文本编辑器编辑,推荐使用工具policytool,这是jre提供的一个专门用来编辑策略文件的工具.
   
2. 可信(Secure)代码和交换文件需要使用的API和工具
    为了保证代码的安全性,需要确定代码或文件的来源,需要提供者进行数字签名.可以使用keytool或者security API来产生公钥/私钥对.为了验证公钥的确来自发布者,需要数字证书(certificate),数字证书由被信任的第三方提供.公钥/私钥对和证书存储在一个密码保护的数据库里,叫做keystores.
   
2.1 对代码签名并赋予许可
2.2 交换文件
2.3 产生和校验签名

3. 实现你自己的许可
    本节中有一个例子,参见http://java.sun.com/docs/books/tutorial/security1.2/userperm/index.html
    在代码中检查是否具有某种许可:
    1. 调用System.getSecurityManager()来得到当前安装的security manager.
    2. 如果返回结果不为null,可以进一步查询是否具有需要的许可.java.security.AccessController有个方法叫做doPrivileged,可以临时的提高某种权限来获得特定资源的访问许可,从而可以将对于特定资源的访问限定在某个类,并不对整个应用放开,只有调用特定的类才能访问特定的资源,详见New Privileged Block API相关文档.
    3. java.security.Permission和java.security.BasePermission这两个类对于控制资源访问权限很重要.java.security.SecurityManager的方法checkPermission()接受的参数就是Permission极其子类.具体参见Java文档的java.security包部分.
    4. 这个例子最后还详细描述了三个角色(框架开发者,资源访问类开发者和使用者)需要做的事情.
   
参考文献: http://java.sun.com/docs/books/tutorial/security1.2/TOC.html
分享到:
评论

相关推荐

    华为java培训讲义

    沙箱机制:只能做沙箱允许的操作 通过下面环节,实现安全 加载有用的类文件,不需要的不加载 校验字节码,查看允许的操作 查看代码和虚拟机的特性是否相符 查看代码是否有破坏性 查看是否有违规操作...

    P神-Java安全漫谈

    代码安全性:Java提供了强大的安全机制,如访问控制、类加载验证、沙箱模型等。这些机制确保代码在运行时不会执行恶意操作或访问未经授权的资源。 身份认证和访问控制:Java安全包括用户身份认证和授权机制,以确保...

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

    第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中等6章和附录a-c完全可以作为class文件和指令含集的参考手册。本书还附带...

    Java面试题集合.rar

    Java是一种广泛应用的高级编程语言,具有面向对象、跨平台和安全性等特点。它由Sun Microsystems(后被Oracle收购)于...它通过提供安全沙箱环境、字节码验证和安全管理器等机制来保护用户计算机免受恶意代码的影响。

    职工信息管理java实现小demo

    Java是一种广泛应用于软件开发的高级编程语言...4. **安全性**: Java提供了安全性机制,包括字节码验证和安全沙箱,以强制执行安全策略,防止恶意代码对系统造成破坏或窃取敏感信息。 5. **多线程**: Java内置对多线程

    学生管理系统java实现小demo

    Java是一种广泛应用于软件开发的高级...4. **安全性**: Java提供了安全性机制,包括字节码验证和安全沙箱,以强制执行安全策略,防止恶意代码对系统造成破坏或窃取敏感信息。 5. **多线程**: Java内置对多线程......

    游戏猜一猜java实现小demo

    Java是一种广泛应用于软件开发的高级编程语言...4. **安全性**: Java提供了安全性机制,包括字节码验证和安全沙箱,以强制执行安全策略,防止恶意代码对系统造成破坏或窃取敏感信息。 5. **多线程**: Java内置对多线程

    java96期java操作docker代码.rar

    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。即:Docker是一种容器技术,解决软件跨环境迁移的问题。 Docker应用场景 Web 应用的自动化打包和发布 自动化...

    【微服务系列】Docker部署微服务

    【微服务系列】一个小时让你从零,学会docker进行项目...容器是完全使用沙箱机制,相互隔离 容器性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)

    java8源码-akangaroo:学习笔记,完善中

    双亲委派机制/沙箱安全机制 JMM(Java内存模式) 字节码执行的过程/机制 GC(垃圾回收算法) JVM性能监控和故障定位 JVM调优 JavaWeb servlet request response cookie && session 基础框架 SpringMVC Mybatis ...

    Java经典入门教程pdf完整版

    好的向导攴持打包和部署应用,添加了目录攴持,增强了安全机制,提高了性能 JE是对标准版进行功能扩展,提供一系列功能,用来解决进行企业应用开发中所面临 的复杂的问题。具体的我们会放到后面JFE的课程去讲。 4:三个...

    在docker中部署tomcat并且部署java应用程序的步骤详解

    容器是完全使用沙箱机制,相互之间不会有任何接口。 1、先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7; 第二步:...

    好玩的java小程序源码-evercookie-applet:Evercookie的JavaApplet持久性

    为了更好地衡量,它还尝试使用已知的漏洞来逃避小程序沙箱并将包含 cookie 数据的文件写入用户的硬盘驱动器。 PersistenceService 方法是完全合法的并使用官方 Java API。 该漏洞利用方法使用了一个众所周知且已被 ...

    Docker for Windows Installer.exe

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    Turbo Studio 21(虚拟封装软件)官方正式版V21.3.1477 | turbo studio设置封装图标

    对于程序开发者和IT专业人士而言,Turbo Studio无疑是相当理想的帮手,跟传统的部署方法不同的是,turbo studio 打包后的虚拟化应用采用动态沙箱隔离管理机制与其它系统真实应用互相隔离,能最大程度上避免DLL冲突、...

    docker-install.rar

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。...

    spring-rest-client

    Spring Rest Client是一个用于测试流利/React性Web客户端的沙箱。 从源头建造 Spring Rest Client使用基于的构建系统。 在下面的说明中,。/ ./mvnw是从源树的根调用的,用作构建的跨平台,自包含的引导程序机制。 ...

    在Ubuntu系统上安装Node.JS的教程

    Node.js 在实时的 Web应用上采用了基于 WebSocket 的推送技术...可能有人会说,我们已经使用 Flash 和 Java Applet 的形式很多年了——但实际上,这些方式只是使用网络将数据传递到客户端上的沙箱环境。他们都是隔离运

    android手机安全卫士

    1、通过0权限上传下载数据,重启手机等案例,深入讲解android沙箱,安全机制和权限模型。 2、通过分析恶意代码的提权漏洞,讲解如何维护系统的安全。 3、通过linux键盘驱动案例的讲解,分析盗号木马的原理及其实现...

Global site tag (gtag.js) - Google Analytics