[发明专利]一种在Java虚拟机中安全运行第三方代码的方法有效
申请号: | 201210344765.8 | 申请日: | 2012-09-18 |
公开(公告)号: | CN102902911A | 公开(公告)日: | 2013-01-30 |
发明(设计)人: | 不公告发明人 | 申请(专利权)人: | 北京深思洛克软件技术股份有限公司 |
主分类号: | G06F21/51 | 分类号: | G06F21/51;G06F9/455;G06F9/445 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 100084 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 java 虚拟机 安全 运行 第三 代码 方法 | ||
技术领域
本发明涉及信息安全领域,特别涉及一种安全运行不可控的第三方代码的方法。
背景技术
软件或服务器往往需要允许用户执行自定义的代码以实现高度的可定制性或安全性。但是由于第三方编写的代码的不可控性,限制其运行环境以保护服务器资源或上层软件的正常运行就成了一个很重要的问题。
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
在JVM中使用一个类时,该类的加载过程是唯一可以在外部进行干预的,这可以通过JVM提供的自定义类加载器来实现。通常JVM中引入自定义类加载器的主要目的是实现代码的热部署,如OSGi系统等。OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统。OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选环境。OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。这些组件能够组装进一个应用和部署中。
JVM虚拟机提供的安全性主要通过虚拟机的安全策略文件实现,通过安全策略文件控制JVM中类对资源的访问(如文件系统和网络资源等)。但是在实际应用中,往往需要控制第三方代码本身不能直接访问一些外部资源(如文件、网络和一些本地模块的加载等),但是可以通过调用本地提供的方法来访问,而且JVM同时运行多个不同的第三方代码时还要实现代码间的相互隔离,这时只通过在JVM启动时静态地提供一个安全策略文件很难实现。
发明内容
有鉴于此,本发明提供了一种在JVM上安全运行第三方代码的方法,利用JVM提供的自定义类加载器的技术来控制第三方代码的本地模块和类的加载,只允许第三方代码加载和使用系统提供的已封装好业务逻辑的类,第三方代码对外部资源的访问只能通过上述系统提供的已封装好的业务逻辑类的接口执行,第三方代码本身不能直接访问外部资源,从而实现安全访问外部资源。
根据本发明,提供一种在Java虚拟机中安全运行第三方类的方法,该方法包括:
创建自定义加载器,所述自定义加载器的父加载器为Java虚拟机当前线程的类加载器;
通过所述自定义加载器来加载第三方类,由所述自定义加载器判断是否允许所述第三方类加载特定的系统类;
如果允许,则所述自定义加载器委托其父加载器加载所述系统类;
若不允许,则抛出异常,从而控制所述第三方类中所能使用的类。
根据本发明的一个方面,根据需要,能够同时创建多个所述自定义加载器以执行多份所述第三方类。
根据本发明的一个方面,关于所述第三方类所允许访问的类和/或所不允许访问的类的信息存放在所述自定义类加载器能够找到的存放位置。
根据本发明的一个方面,所述信息存放在特定文件中,或所述信息存放在数据库中,或所述信息直接写入在程序代码中。
根据本发明的一个方面,所述自定义类加载器加载所述第三方类时,确定所述第三方类可使用和/或不可使用的类。
根据本发明的一个方面,如果所述自定义加载器判断出所述第三方类加载不允许加载的类时,抛出异常。
根据本发明的一个方面,分别采用不同的加载器来分别加载所述第三方类以防止恶意访问。
附图说明
图1为按照本发明的一种在JVM上安全运行第三方代码的方法的一优选实施例的流程示意图。
图2为图1所示实施例中结构框图。
具体实施方式
当JVM需要加载第三方代码时,创建一个自定义的类加载器,其父加载器设置为JVM当前线程的默认类加载器(根据本发明的一个实施例,通常就是SystemClassLoader),通过自定义类加载器的一个实例来加载第三方代码。在自定义类加载器中通过一个可使用类的列表(或不可使用类的列表)来控制第三方代码中外部类的使用,自定义类加载器的功能如下:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京深思洛克软件技术股份有限公司,未经北京深思洛克软件技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210344765.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:电阻传送带支持装置
- 下一篇:一种新型胶带输送机的胶带过渡装置