java安全沙箱

java安全沙箱(一)之ClassLoader双亲委派机制

余生长醉 提交于 2020-03-02 16:50:38
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: ‍ ‍ 类加载体系 ‍ ‍ .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及Java API 本篇博客主要介绍 “类加载体系”的基本原理; 如需了解其它几类安全机制可以通过上面的 博客链接进入查看。 简介 “类加载体系”及ClassLoader双亲委派机制。java程序中的 .java文件编译完会生成 .class文件,而 .class文件就是通过被称为类加载器的ClassLoader加载的,而ClassLoder在加载过程中会使用“双亲委派机制”来加载 .class文件,先上图: 看着图从上往下介绍: BootStrapClassLoader:启动类加载器,该 ClassLoader是jvm在启动时创建的,用于加载 $JAVA_HOME/jre/lib下面的类库(或者通过参数 -Xbootclasspath指定 )。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不能直接通过引用进行操作。 ExtClassLoader:扩展类加载器, 该 ClassLoader是在sun.misc.Launcher 里 作为一个内部类 ExtClassLoader 定义的(即 sun.misc.Launcher

java安全沙箱(四)之安全管理器及Java API

孤街醉人 提交于 2019-12-05 01:39:04
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 ‍ ‍ 安全管理器及Java API ‍ ‍ 本篇博客主要介绍 “类安全管理器及Java API”的基本原理, 如需了解其它几类安全机制可以通过上面的 博客链接进入查看 。 简介 java安全沙箱的前三类保证了jvm所运行程序的完整性,使得jvm不会因为运行有漏洞或恶意的代码而导致出现不可预期的状态。而第四类沙箱模型是 “类安全管理器及Java API”,它能保护jvm在运行 有漏洞或恶意的代码不会破坏外部资源。java通过称为安全管理器的一类API来保证这类安全性。 安全策略文件 首先介绍下安全策略文件,如果启用了安全管理器,默认会使用jre自带的 安全策略文件 $JAVA_HOME/jre/lib/security/java.policy来指定访问外部资源的权限,该策略文件也可以通过jvm参数 -Djava.security.policy来指定。 Policy文件的主要格式如下: keystore "some_keystore_url", "keystore_type"; grant [SignedBy "signer_names"] [, CodeBase "URL"] {

java安全沙箱(二)之.class文件检验器

不想你离开。 提交于 2019-12-04 00:03:22
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 ‍ ‍ .class文件检验器 ‍ ‍ 内置于Java虚拟机(及语言)的安全特性 安全管理器及Java API 本篇博客主要介绍 “.class文件检验器”的基本原理;如需了解其它几类安全机制可以通过上面的 博客链接进入查看 。 简介 jvm的.class文件检验器用于检查.class文件是否拥有合法的内存结构,这种检查是有必要的,因为java的.class文件可能来自本机,也可能来自网络,可能是你自己编译的文件,也可能是别人篡改过的文件。而对于jvm来说,一个.class文件就是一个字节序列,它不会过问字节序列的来源,只会校验字节序列的结构是否正确。 .class文件检验器保证安全的措施就是检验.class文件字节码的健壮性,比如某个 .class文件是 被恶意篡改过的,这个.class文件中包含一个方法,该方法有一条goto指令,直接跳到方法外部去执行未知的代码,如果执行该方法,很可能会导致jvm崩溃。所以,由 .class文件检验器检查字节码的健壮性是很有必要的。 虽然.class文件检验器检查字节码能保证程序的健壮性, 然后这是需要牺牲一些性能的;为了将这种影响降到最低, .class文件检验器 会在字节码执行之前完成大部分的检验工作,也就是说,