- 浏览: 13590 次
最新评论
Java体系结构对信息安全的支持
2010年06月09日
Java语言拥有三大特征:平台无关性、网络移动性和安全性,而Java体系结构对这三大特征提供了强大的支持和保证,本文着重介绍Java体系结构对支持信息安全的原理和使用方法。 Java体系结构
首先Java的源代码Java文件由编译器编译成 Java的二进制字节码class文件,然后class文件由Java虚拟机中的类装载器进行加载,同时类装载器还会加载Java的原始 API Class文件,类加载器主要负责加载、连接和初始化这些class文件以后,就交给虚拟机中的执行引擎运行,执行引擎将class文件中的Java指令解释成具体的本地操作系统方法来执行,而安全管理器将在执行过程中根据设置的安全策略控制指令对外部资源的访问。
Java的执行方式不是编译执行而是解释执行,不同平台上面相同的源代码编译成符合Java规范的相同的二进制字节码,然后再交给支持各自平台的虚拟机去解释执行,"先编译,后解释,再执行"三步走的方式使得Java实现了"一次编写,到处运行",如果Java应用使用的是100%标准Java API并且没有直接调用本地方法,那就可以不加修改地运用在多种平台上,这样的平台无关性使得在异构的网络环境或者嵌入式方面的应用更方便和现实。 Java的网络移动性带来了一种全新的软件模式,在分布式处理模式的基础之上,可以将软件和数据通过网络传送到客户端去,这样确保了客户端有必备的软件来浏览和操纵通过网络传输的数据,Java体系结构支持把单一的执行文件切割成小的二进制字节码文件Class文件,而这些文件可以按照应用的需要动态连接、动态扩展。Java体系结构对安全性的支持主要是通过Java语言本身安全性、虚拟机的类加载器和安全管理器以及Java提供的安全API几个方面来实现:防止恶意程序的攻击,程序不能破坏用户计算机环境;防止入侵,程序不能获取主机或所在内网的保密信息;鉴别,验证程序提供者和使用者的身份;加密,对传输交换的数据进行加密,或者给持久化的数据进行加密;验证,对操作设置规则并且进行验证。
Java信息安全的必要性
随着互联网应用越来越广泛,并且互联网其本身独特的资源共享性,因此能够按照用户需求及时准确获得信息和处理信息的应用对用户而言就相当重要,这也是Java得以迅速发展和被广泛接受的原因。但同时网络也提供了一条攻击接入计算机的潜在途径,特别是当用户下载网络软件在本地运行,这就要求Java能够对病毒/木马的问题加以防范,对信息以及本地环境进行保护。比如我们浏览一个网页的时候,网页上的Applet可能会自动下载并且运行,而这个Applet完全有可能来自不可靠的地方,又或者我们使用通过 JINI服务查找到的网络上不可靠的服务对象来获得服务,如果没有Java体系结构提供的安全机制,这就很有可能引入了一个怀有敌意的程序造成信息丢失、资料泄密、相信伪造数据和修改本地计算机安全设置等等后果,带来未知的严重后果。
Java语言本身安全性
Java语言的设计者们是在C++的基础上设计出来 Java的,因此与C++相比它的语法更加简单清晰,结构、单元、运算符重载、虚拟基础类等在Java中都没有采用,并且取消了多重继承而采用实现多个接口的方式。这样能降低开发人员犯错误的几率,帮助他们写出更安全的代码。
Java中去除了C++语言中的令人费解、容易出错的"指针",用列表、堆、哈希表等结构来代替,避免了任何不安全的结构。Java也没有索引核查的数组访问,因为这往往会导致不定的、不可预测的程序操作,它所有的数组访问都必须先检查是否越界。Java要求所有的变量在初始化以前不能使用,对于基本数据类型变量都会自动地赋给某个初始值,避免了未初始化变量获取内存信息。所有这些都使得程序不能访问任意的内存地址,对于内存中的实体信息只能通过有权限的对象进行访问,而不会出现象C++那样把类型指针强制转换成内存的指针,然后通过内存查找的方法找到私有的变量。
Java分配内存对于开发人员来说是透明的,开发人员使用new方法新建对象,这时候虚拟机就会从堆内存中找到合适的内存空间,开发人员不需要也不能够进行干预。而对于内存的回收,Java避免了开发人员明确干预对象的回收,比如C的free或C++的delete命令,避免了开发人员无意间对内存的破坏。Java采用虚拟机的"垃圾回收"机制来实现的内存自动管理,释放不再被使用的内存资源,内存回收器就像一台垃圾收集车,但是和我们在大街上看到的收集车,仅仅收集大家放在垃圾桶里面的垃圾不同的是,它还要到你家里去帮你找出那些东西是不要用的垃圾,然后把这些东西拿走,最后还要整理家里的空间,腾出最大的空间让你放新东西。Java的内存回收器目的就是找到不再引用的对象,释放内存空间,并且需要整理内存的碎片空间,尽量避免出现"内存不足"的情况。
对于在网络中交换的序列化对象很容易在重建对象的时候访问到对象的私有信息,这时候Java提供了两种办法来保护信息,一种就是采用给变量加上transient关键字的方法,这样对象序列化的时候就不会读写该变量,另一种就是在实现Externalizable接口而不是Serizlizable接口,这样对象就只能通过writeExternal和 readExternal方法来保存和重建,其他方法无法进行了。
以上这些都是Java语言本身对信息安全提供的基础。
类加载器
虽然名字叫类加载器,但是实际上Java虚拟机中的类加载器不光要负责加载而且要负责连接和初始化应用程序需要用到的Java类型。加载就是把二进制形式的字节码读入虚拟机中,而连接就是给这个已经读入的类型分配类变量内存以及把类型中用到常量池中的符号转换为直接引用,最后的初始化过程就是赋给类型变量合适的初始值。
类加载器为加载的类提供了不同的命名空间,统一源代码生成的字节码被加载到同一个命名空间中,相同命名空间不能加载类名相同的类,同一个命名空间内的类可以直接进行交互,而不同的命名空间的类是不能交互的,除非显式地提供了交互机制,通过命名空间和类成员访问权限的设置保护了被信任的类边界。
类加载器分成了启动类加载器、标准扩展类加载器、路径类加载器和网络类加载器四种。启动类加载器从本地系统中加载原始的Java API类,用来启动Java虚拟机,而其他三种加载器是在运行时加载用户定义的类,标准扩展类加载器加载的是不同虚拟机提供商扩展的标准Java类,而在 classpath中的类由路径类加载器来加载,网络类加载器加载通过网络下载得到的类文件,每一种加载器在加载类的时候都会建立一个加载器实例。类加载器采用双亲委派链模式(这个模式很类似GOF在《设计模式》一书中提到的责任链模式)除了启动类加载器以外,每个类加载器都有自己的"双亲"。一个类可以通过有三种方法定义自己的双亲:第一种通过引用,比如A类中引用了B类(即A和B有关联关系),那么B类的加载器就会作为A类的加载器的"双亲",早于A 类加载;第二种使用loadClass方法来自定义"双亲",这时被load的类的"双亲"即本身这个类加载器;第三种在没有采用前两种的情况下使用的默认方式,默认把启动类加载器作为"双亲"。
在加载过程中,当发出加载请求的时候,加载器首先询问它的"双亲"
发表评论
-
【贪吃蛇―Java程序员写Android游戏】系列 3. 用J2ME实现Android的Snake Sample详解
2012-01-20 10:18 714【贪吃蛇―Java程序员写Android游戏】系列 3. 用J ... -
编译Boost 1.38
2012-01-20 10:18 835编译Boost 1.38 2010年10月28日 首先, ... -
Collection接口和Map接口的主要实现类
2012-01-20 10:18 754Collection接口和Map接口的 ... -
Microsoft PE/COFF文件格式
2012-01-20 10:18 936Microsoft PE/COFF文件格式 ... -
开始-java之路(1)
2012-01-20 10:17 863开始-java之路(1) 2011年02月17日 今天开 ... -
ARM经典100问
2012-01-19 15:19 724ARM经典100问 2011年03月13日 第1章 体系 ... -
电脑管理破解
2012-01-19 15:18 587电脑管理破解 2011年03月10日 1、单击“开始―― ... -
电脑知识
2012-01-19 15:18 579电脑知识 2010年06月23日 ... -
2010-11-17
2012-01-19 15:18 6142010-11-17 2010年11月17日 PC:个人 ... -
2003 系统常用的设置
2012-01-17 05:05 6702003 系统常用的设置 201 ... -
站点主机安全档案
2012-01-17 05:05 680站点主机安全档案 2011 ... -
计算机常用词汇(F)
2012-01-17 05:05 655计算机常用词汇(F) 2011年09月29日 Failu ... -
WINDOWS XP 桌面主题的安装制作
2012-01-17 05:05 976WINDOWS XP 桌面主题的安装制作 2011年04月1 ... -
组件介绍
2012-01-16 03:56 805组件介绍 2009年11月22日 ... -
简历3
2012-01-16 03:56 693简历3 2009年11月09日 简[/b][b]历[/b ... -
JAVA基础加强(一)
2012-01-16 03:56 637JAVA基础加强(一) 2011年04月04日 2011 ... -
有关SVN的一些麻烦
2012-01-16 03:56 1201有关SVN的一些麻烦 2011年02月28日 前段时间整 ...
相关推荐
Java体系结构对信息安全的提供灵活而健壮框架,只要我们使用得当就能够很好的保证信息安全性,降低我们的代价和风险,同时我们也要加强一些其他相关的安全工作,比如保护好我们的私钥等等,这样才能保证Java安全框架...
2022年,Java体系结构在信息安全支持方面依然扮演着至关重要的角色。以下将详细介绍Java如何保障信息的安全。 Java 体系结构的安全性主要体现在以下几个方面: 1. **Java 字节码和虚拟机**:Java 源代码被编译成...
### Java卡技术体系结构与程序员指南 #### 一、引言 随着信息技术的快速发展,智能卡作为一项重要的安全技术,在金融、身份验证等多个领域发挥着关键作用。Java卡技术作为一种在智能卡上运行Java应用程序的技术,...
在信息技术领域,软件设计与体系结构是构建高效、可维护和可扩展软件系统的关键环节。这个PPT主题涵盖了软件工程中的核心概念,旨在帮助学习者理解和掌握如何构建软件的蓝图,以及如何有效地组织和连接各个组件,...
总之,Java加密体系结构为Java应用程序提供了强大而灵活的密码学支持,使得开发者能够在遵循平台无关性和安全性原则的同时,实现复杂的安全功能。无论是简单的报文摘要计算还是复杂的密钥管理和数字签名,JCA都提供...
本文档是对 Java 开发工具包 (JDK) 1.2 版中发布的 Java 加密体系结构 API 及其缺省提供者的描述和说明。描述 JCE API 的文档将...有关 JDK 安全 API 中 Java 安全体系结构方面的信息,参见“Java 安全体系结构规范”。
Java 2平台安全技术是Java开发中的核心组成部分,它为应用程序提供了一套强大的安全机制...这本书“Java 2平台安全技术——结构, API设计和实现”将帮助读者深入理解这一领域的各个方面,是Java安全开发者的宝贵资源。
软件体系结构是构建大型复杂软件系统的基础框架,它定义了系统的组织结构、组件以及它们之间的交互方式。在软件工程领域,良好的体系结构设计是保证软件质量、可维护性、可扩展性和性能的关键因素。C2代码是软件体系...
进一步深入,Java的高级特性,如反射、泛型和注解,允许动态访问和操作类,提供类型安全和代码复用,以及元数据信息的附加。这些特性在设计模式、框架和库的实现中广泛使用。 在Java EE(企业版)领域,初级软件...
Java知识体系总结 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它以其“一次编写,到处运行”的特性闻名,适用于开发跨平台的应用程序,包括桌面应用、企业...
本文主要探讨了Java对安全性的支持,尤其是在JDK 1.2版本中的安全模型和相关机制。 首先,Java的安全性体现在其对代码的管理和执行环境。无论是本地还是远程的代码,都需要遵循一个安全策略(security policy),这...
JDK 1.2版本的发布,标志着Java进入了Java2时代,该版本对安全平台和安全体系结构进行了根本性的改进,为用户和开发者提供了更为安全的编程环境。 随着因特网技术的不断进步,Java技术也得到了快速的提升,Sun公司...
- **反射**:是一种强大的工具,允许运行时动态获取类的信息并操作其结构和行为。 - **泛型**:提高了代码的复用性和安全性,使得类型检查可以在编译期完成。 - **注解**:用于向编译器或JVM提供元数据,有助于实现...
本文将详细探讨Java对安全性的支持,主要涉及以下几个关键知识点: 1. **Java安全模型**: Java的安全模型建立在一种称为“沙箱”(sandbox)的概念上,它将代码组织到不同的安全域中。每个域都有特定的权限控制,...
通过"关于java知识结构图"的学习,初学者可以逐步构建起完整的Java知识体系,从基础语法到高级特性,再到实战应用,形成一个系统性的认知。在实践中不断深化理解,将理论知识转化为实际技能,才能在Java的世界里...
标题:“Oracle11g体系结构图” 描述:“Oracle11g体系结构图,oracle结构清清楚楚” **一、Oracle11g体系结构概览** Oracle11g是Oracle公司推出的一款高性能、高可用性和高安全性的关系型数据库管理系统。其体系...
3. 官方文档:阅读PostgreSQL的官方文档是获取权威信息和深入理解体系结构的最好方式。 4. 书籍:市面上有各种关于PostgreSQL的书籍,覆盖基础知识到高级主题。 5. 网络课程和研讨会:参加在线或线下的培训课程和...
本Java体系笔记覆盖了从基础知识到高级特性的全面内容,帮助读者建立扎实的Java知识体系,无论你是初学者还是经验丰富的开发者,都能从中受益。通过深入学习和实践,你可以掌握编写高效、稳定且易于维护的Java应用。
### Java安全机制的体系结构 Java安全架构的核心在于其设计时就充分考虑了安全因素,而不是后期添加的。这一设计思路主要体现在以下三个方面: 1. **运行方式的独特性**:Java程序的运行遵循“先编译,后解释,再...