解析Java体系结构对信息安全的支持 - 编程入门网
类没有被加载并且查找不到,返回结果给它的子加载器,由子加载器加载,直到请求返回给原来的加载器,这时还没有加载成功的话,由网络类加载器试图从网络中寻找并下载,如果还不成功将抛出NoClassDefFoundError异常。
这个过程保证了启动类加载器可以抢在标准扩展类加载器之前加载类,而标准扩展类加载器又可以抢在路径类加载器之前加载类,最后才由网络类加载器加载。比如应用被试图加载一个带有恶意代码的java.lang.String类,因为它本来是Java API的一部分,它们加载到的命名空间可以得到被信任类的特殊访问权限,但是由于启动类加载器是最早被加载的,所以java.lang.String只会被启动类从Java原始的API中加载,而带有恶意代码的java.lang.String类不会被加载进来,这样有效的保护了被信任的类边界。 类加载器中还包括了一个类型检查的功能模块,它负责保证程序的健壮性,它在类型的生命周期中要进行四次检查。第一次检查是在加载的时候,主要检查二进制字节码的结构,首先格式要满足Java语言定义的规范,然后要保证将要加载的类字节码是一组合法的Java指令。第二次检查是在连接的时候,主要是类型数据的语义检查,保证字节码在编译时候遵守了规范,比如对final类不会派生出子类,也不会重载final的方法;每个类只有一个超类;没有把基本数据类型强制转换成其他数据类型。第三次检查也是在连接的时候,关注于指令的结构,保证指令的操作数类型和值正确,操作数堆栈不会出现上溢出或者下溢出。最后一次检查在动态连接的时候,主要检查类型中的符号引用被解析时是否正确。以上的问题都会产生恶意的行为所以必须在运行前进行检查,而一部分检查工作会在虚拟机运行字节码的时候检查,比如数组越界,对象类型的转换等等,一旦检查发现了问题就会抛出异常,使得程序不被执行。 类加载器避免了出现某些怀有敌意的人编写自己的Java类,而这些类方法中含有跳转到方法之外的指令,导致虚拟机的崩溃和保密信息被获取的可能,保证了程序的健壮性,也不会出现替代原有Java API类的恶意代码被运行的情况,并且类加载器防止了恶意代码去干涉善意的代码,守护了被信任的API类库边界,确保了代码可以进行的操作。 解析Java体系结构对信息安全的支持(3)时间:2010-12-23安全管理器 安全管理器为Java虚拟机的环境建立了一个起到保护作用的"沙箱",这个"沙箱"为程序提供了一个限制了应用的操作运行环境,保护了虚拟机外部的资源不会被虚拟机内部的恶意代码破坏。安全管理器的安全策略可以灵活的建立细粒度的访问控制策略,将不同的资源访问权限授予不同的代码单元,这也是Java体系结构安全模型的最大特点和优势之一。 首先在赋予权限前我们要明确代码单元的来源,签名担保可以使用户确认文件的来源,并且这些文件在本地虚拟机加载前没有被修改,只有保证了源代码来源的可靠性,才能分配相应的操作权限。对class文件或者jar文件的签名可以用jdk中的jarsigner这个工具。它首先对根据文件内容进行单向散列计算,产生一个散列值,然后把这个散列加到文件后面作为文件的一部分传递给用户,用户收到文件后重新生成一次散列值,然后跟文件后部的散列值进行比较,如果这两个散列值相同说明文件内容没有被改动,虽然不同的文件内容可能生成相同的散列值,但是一般Java采用的是124位散列,这个长度想要从一个不同的输入产生一个已知散列值的计算是不可行的。仅仅通过散列值是没有办法保证代码的来源的,因为怀有恶意的人完全可以把整个文件和散列值都替换掉,为了防止这种事情发生,必须在发送前用私钥对散列值进行加密,为什么不对整个文件进行加密呢,因为jarsigner默认采用的是DES算法,加密本身也是一个费时的过程 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |