WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹦绠鹃柍褜鍓氱换娑欐媴閸愬弶鎼愮痪鍓ф嚀閳规垿鎮╃€圭姴顥濋梺姹囧€楅崑鎾诲Φ閸曨垰绠涢柛顐f礃椤庡秹姊虹粙娆惧剳闁哥姵鍔欐俊鐢稿礋椤栨艾鍞ㄩ梺闈浤涙担鎻掍壕闁圭儤顨嗛埛鎺楁煕閺囥劌浜滄い蹇e弮閺屸€崇暆鐎n剛鏆犻柧浼欑到閵嗘帒顫濋悡搴d画缂佹鍨垮缁樻媴缁涘娈┑顔斤公缁犳捇銆佸鎰佹▌濠电姭鍋撳ù锝囩《閺€浠嬫煟濡鍤嬬€规悶鍎辫灃闁绘ê寮堕崯鐐电磼閸屾氨效鐎规洘绮忛ˇ瀵哥棯閹佸仮鐎殿喖鐖煎畷鐓庘槈濡警鐎崇紓鍌欑劍椤ㄥ棗鐣濋幖浣歌摕闁绘棃顥撻弳瀣煟濡も偓閻楀棗鈻撳Δ鍛拺閻犲洠鈧櫕鐏€闂佸搫鎳愭慨鎾偩閻ゎ垬浜归柟鐑樼箖閺呮繈姊洪棃娑氬婵☆偅鐟╅、娆掔疀閺冨倻鐦堥梺姹囧灲濞佳勭閿曞倹鐓曢柕濞垮劤閸╋絾顨ラ悙鏉戝妤犵偞锕㈤、娆撴嚃閳哄骞㈤梻鍌欐祰椤鐣峰Ο鑲╃煋妞ゆ棁锟ユ禍褰掓煙閻戞ɑ灏ù婊冪秺濮婅櫣绱掑Ο铏逛桓闂佹寧娲嶉弲娑滅亱闂佸憡娲﹂崹閬嶅煕閹达附鐓欓柤娴嬫櫅娴犳粌鈹戦垾鐐藉仮闁诡喗顨呴埥澶愬箳閹惧褰囩紓鍌欑贰閸犳牠顢栭崨鎼晣闁稿繒鍘х欢鐐翠繆椤栨粎甯涙繛鍛喘濮婄粯鎷呴悷閭﹀殝缂備浇顕ч崐鍨嚕缂佹ḿ绡€闁搞儯鍔嶅▍鍥⒑缁嬫寧婀扮紒瀣崌瀹曘垽鎮介崨濠勫幗闁瑰吋鐣崹濠氬煀閺囥垺鐓ユ慨妯垮煐閻撶喖鐓崶銉ュ姢缂佸宕电槐鎺旂磼濡偐鐣虹紓浣虹帛缁诲牆鐣峰鈧俊姝岊槺缂佽鲸绻堝缁樻媴缁涘娈愰梺鎼炲妺閸楀啿鐣烽鐐茬骇闁瑰濮靛▓楣冩⒑缂佹ɑ鈷掗柍宄扮墦瀵偊宕掗悙瀵稿幈闂佹娊鏁崑鎾绘煛閸涱喚鎳呮俊鍙夊姇铻i悶娑掑墲閺傗偓闂備胶绮崝鏇炍熸繝鍥у惞闁绘柨鐨濋弨鑺ャ亜閺冨洦顥夐柛鏂诲€濋幗鍫曟倷閻戞ḿ鍘遍梺鍝勬储閸斿本鏅堕鐐寸厱婵炲棗绻掔粻濠氭煛鐏炵晫效鐎规洦鍋婂畷鐔碱敆閳ь剙鈻嶉敐鍥╃=濞达絾褰冩禍鐐節閵忥絾纭炬い鎴濇川缁粯銈i崘鈺冨幍闁诲孩绋掑玻璺ㄧ不濮椻偓閺屻劌鈽夊Ο澶癸絾銇勯妸锝呭姦闁诡喗鐟╅、鏃堝礋椤撴繄绀勯梻鍌欐祰椤曟牠宕伴弽顐ょ濠电姴鍊婚弳锕傛煙椤栫偛浜版俊鑼额嚙閳规垿鍩勯崘銊хシ濡炪値鍘鹃崗妯侯嚕鐠囨祴妲堥柕蹇曞閳哄懏鐓忓璺虹墕閸旀挳鏌涢弬娆炬Ш缂佽鲸鎸婚幏鍛矙鎼存挸浜鹃柛婵勫劤閻挾鎲搁悧鍫濈瑨闁哄绶氶弻鐔煎礈瑜忕敮娑㈡煛閸涱喗鍊愰柡灞诲姂閹倝宕掑☉姗嗕紦 ---闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏃堟暜閸嬫挾绮☉妯哄箻婵炲樊浜滈悡娑㈡煕濞戝崬骞樻い鏂挎濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�
开发学院WEB开发Jsp JAVA的安全结构 阅读

JAVA的安全结构

 2008-01-05 10:38:11 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閹绘帞鈧參姊哄Ч鍥х仼闁诲繑鑹鹃悾鐑藉蓟閵夛妇鍘甸梺瑙勵問閸犳牠銆傛總鍛婄厱閹艰揪绱曟牎闂侀潧娲ょ€氫即鐛幒妤€绠f繝闈涘暙娴滈箖鏌i姀鈶跺湱澹曟繝姘厵闁绘劦鍓氶悘杈ㄤ繆閹绘帞澧涚紒缁樼洴瀹曞崬螖閸愬啠鍓濈换娑樼暆婵犱胶鏁栫紓浣介哺閹瑰洤鐣烽幒鎴僵闁瑰吀鐒﹂悗鎼佹⒒娴g儤鍤€闁搞倖鐗犻獮蹇涙晸閿燂拷濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩缁狀垶鏌涢幇闈涙灈鐎瑰憡绻冮妵鍕箻鐎靛摜鐣奸梺纭咁潐濞茬喎顫忕紒妯肩懝闁逞屽墮宀h儻顦查悡銈夋煏閸繃鍋繛宸簻鎯熼梺瀹犳〃閼冲爼宕濋敃鈧—鍐Χ閸℃鐟愰梺鐓庡暱閻栧ジ宕烘繝鍥у嵆闁靛骏绱曢崢顏堟⒑閹肩偛鍔楅柡鍛⊕缁傛帟顦寸紒杈ㄥ笚濞煎繘鍩℃担閿嬵潟闂備浇妗ㄩ悞锕傚箲閸ヮ剙鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹  闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柤鍝ユ暩娴犳氨绱撻崒娆掑厡缂侇噮鍨堕妴鍐川閺夋垹鍘洪悗骞垮劚椤︻垶宕¢幎鑺ョ厪闊洦娲栨牎闂佽瀵掗崜鐔奉潖閾忓湱纾兼俊顖氭惈椤矂姊洪崷顓涙嫛闁稿妫濋幆鈧い蹇撴祩濡嫰姊洪崫鍕拱婵炲弶岣块幑銏犫攽婵犲嫮鏉搁梺鍝勬川婵兘鎮伴妷鈺傗拻濞达絽鎼敮璺侯熆閻熷府鏀荤紒鍌氱Т楗即宕煎锝呬壕闁哄啫鐗嗙粈鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娑扁偓妤€顭胯閸犳牠婀侀梺缁樕戦悷銉р偓姘煎枤缁粯銈i崘鈺冨幈濡炪倖鍔戦崐鏇㈠几鎼淬劍鐓熼煫鍥ь儏閸旀粓鏌曢崶褍顏€殿喗娼欒灒闁告繂瀚濠碉紕鍋戦崐鎴﹀垂濞差亝鍋¢柍鍝勬噹缁犳牠鏌嶉埡浣告殲闁稿海鍠栭弻鏇㈠炊瑜嶇花濠氭煙閸戙倖瀚�
核心提示: java的安全模型不同于传统的安全方法,传统的安全方法中,JAVA的安全结构,大多数操作系统答应应用程序充分访问系统资源,在操作系统不提供安全保护的机器里,就继续执行第2步的检查,调用安全治理器中合适的检查方法对动作进行检查,运行环境不能被信任,为了弥补这个缺陷

   java的安全模型不同于传统的安全方法,传统的安全方法中,大多数操作系统答应应用程序充分访问系统资源,在操作系统不提供安全保护的机器里,运行环境不能被信任。为了弥补这个缺陷,安全策略经常要求在应用程序执行之前对应用程序建立信任,例如要求程序员在执行从网上获得的应用程序前,先检查病毒和源代码中不安全的代码。这种方法有2个问题:(1)确定程序是否安全的检查很复杂很浪费时间,很少有程序员愿意花时间读程序的源代码,然后再将它编译成本地机器码以保证程序是安全的。(2)病毒检查要不断维护以保证有效性。
  
    JAVA的安全模型是不同的,为了防止用户系统受到通过网络下载的不安全程序的破坏,JAVA提供了1个自定义的可以在里面运行JAVA程序的“沙盒”。JAVA的安全模型使得JAVA成为适合于网络环境的技术。JAVA的安全性答应用户从Internet或Intranet上引入或运行applet,applet的行动被限制于它的“沙盒”,applet可以在沙盒里做任何事情,但不能读或修改沙盒外的任何数据,沙盒可以禁止不安全程序的很多活动,如:
    1.对硬盘进行读写。
    2.和别的主机(不包括程序所在的主机)进行网络连接。
    3.创建1个新过程。
    4.载入1个新的动态库并直接调用本地方法。
  
    “沙盒”模型的思想是在信任的环境中运行不信任的代码,这样即使用户不小心引入了不安全的applet,applet也不会对系统造成破坏。
  
  1 “沙盒”模型
  
    “沙盒”安全模型是内建于JAVA结构的,它主要由以下几部分构成:
    1.内建于JAVA虚拟机和语言的安全特性。
    2.类的载入结构。
    3.类文件校验器。
    4.安全治理器和JAVA API。
  
    下面分别进行阐述。
  
    1.1 内建于JAVA虚拟机和语言的安全特性
  
    JAVA语言有一些机制使得JAVA程序很稳健,这些机制也是JAVA虚拟机(JVM)的特点,它们是:
  
    1.安全的类型转换。在C、C++中,可以通过指针进行任意的类型转换,但经常带来不安全性,而在JAVA中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换。
  
    2.没有指针。指针是C和C++中最灵活、也最轻易产生错误的数据类型。由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显示类型转换后,可以访问1个C++中的私有成员,从而破坏安全性,造成系统的崩溃。而JAVA对指针进行完全的控制,程序员不能直接进行任何指针操作。
  
    3.自动的垃圾收集。在C中,程序员通过库函数malloc()和free()来分配和释放内存,C++中则通过运算符new和delete来分配和释放内存。再次释放已释放的内存块或未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也会逐渐耗尽系统资源。而在JAVA中,所有的数据结构都是对象,通过运算符new为它们分配内存堆。通过new得到对象的处理权,而实际分配给对象的内存可能随程序运行而改变,JAVA对此自动进行治理并且进行垃圾收集,有效地防止了由于程序员的误操作而导致的错误,并且更好地利用了系统资源。
  
    4.数组界限检查。若程序中有数组访问,JVM就会检查数组访问是否越界,从而防止了由数组越界引起的错误。
  
    5.检查null引用。若使用的引用为null,JVM就会抛出1个例外。
  
  
  
    1.2 类载入器结构
  
    类载入器结构在沙盒模型中起了重要作用。在虚拟机中,类载入器负责引入、定义运行程序的类和接口的二进制数据。在虚拟机中可能有不止1个类载入器。
  
    1个JAVA程序能使用2种类型的类载入器:原始的类载入器和类载入器对象。原始的类载入器是JVM实现的1部分,它通常从本地硬盘载入安全的类,包括JAVA API的类。运行时,JAVA应用程序安装类载入器对象,类载入器对象使用JAVA语言编写,编译成类文件后,载入到虚拟机,像其他的对象一样初始化。类载入器对象用于以自定义的方式载入类,例如通过网络下载类文件。JVM把通过原始的类载入器载入的任何类都视为安全的,无论这个类是否是JAVA API的1部分。而将通过类载入器对象载入的类视为可怀疑的,缺省情况下视为不安全的。
  
    JAVA的结构可以在1个应用程序中创建多个命名空间,命名空间是由1个特定的类载入器载入的类名的集合。JVM为每1个类载入器维持1个命名空间,这个命名空间里有由那个类载入器载入的所有类的名字。由不同类载入器载入的类在不同的命名空间里,没有程序的直接答应,这些类不能彼此访问。编写程序时,可以将来源不同的类放在不同的命名空间里,用这种方式,就可以使用JAVA的类载入器结构控制来源不同的代码间的相互作用,就可以防止不安全代码访问、破坏安全代码。对于Applet,也是同样的道理,通过将来源不同的Applet类文件放在不同的命名空间,防止不安全代码破坏安全代码。
  
    在“沙盒”结构中,类载入器结构是防止不安全代码的第一道围墙,它的作用主要有2方面:
    1.防止不安全代码访问、破坏安全代码。
    2.防止不安全代码冒充安全的类。
  
    这2方面作用是通过下述方法实现的:
  
    1.将代码分放在多个命名空间中,并在不同命名空间的代码之间设置“屏障”。类载入器结构是通过命名空间来防止不安全代码访问、破坏安全代码。命名空间在载入到不同命名空间中的类之间设置了1个“屏障”。在JVM中,同一命名空间中的类可以直接相互作用,不同命名空间中的类甚至不能检测到对方的存在,除非程序答应它们相互作用。
  
    2.保护可信任类库(像JAVA API)的边界。假如类载入器载入1个类,这个类用它的名字来冒充是JAVA API的1部分(例如,类名为java.lang.virus),类载入器就传递请求给原始类载入器,假如原始类载入器不能载入这个类,类载入器就抛出安全例外,并拒绝载入这个类。
  
    1.3 类文件校验器
  
    每一个JVM都有1个类文件校验器,用来保证载入的类文件具有正确的内部结构。假如类文件校验器发现类文件有错误,它就抛出1个例外。
  
    类文件校验器能帮助检查出类使用起来是否安全。因为类文件是由二进制数据构成的,JVM不知道这个类文件是否是由黑客产生的,是否有可能破坏虚拟机的完整性,所以虚拟机对引入的字节码进行校验是很重要的。类文件校验器校验的过程可以分为2个阶段:阶段1发生在类刚载入以后,类文件校验器检查类文件的内部结构,包括校验所含的字节码的完整性;阶段2发生在字节码执行的时候,字节码校验器确定符号引用的类、域和方法是否存在。
  
    1.3.1内部检查
  
    在阶段1,类文件校验器检查类文件是否正确组成、内部是否一致、是否遵循JAVA编程语言的限制、含有的字节码是否能由JVM安全执行,假如类文件校验器检查出错误,它就会抛出1个错误,类文件就不再被程序使用。
  
    1.检查格式和内部一致性
  
    在阶段1,校验器除了检查字节码的完整性,还要检查类文件的格式和内部一致性。例如,每一个类文件都必须以同样的4字节数字0xCAFEBASE开头,这样类文件校验器可能检查的第一件事就是引入的文件是否以0xCAFEBASE开头。
  
    类文件校验器还要校验类文件的长度是否与类文件中所记录的长度一致,也即校验类文件是否完整,是否被截去一部分或者被添加。类文件校验器还要检查类是否遵循Java语言的规定,如除了Object类,所有的类都必须有1个父类等。
  
    2.字节码校验
  
    一旦类文件校验器成功地完成格式和内部一致性的检查,就开始对字节码进行校验。通过对代表类方法的字节码流进行数据流分析,进行操作码是否有效及操作码是否有有效的操作数等的检查,以验证字节码流是否可以由虚拟机安全执行。
  
    1.3.2符号引用的校验
  
    符号引用是给出了引用项的名字和其它信息的字符串,这些信息足以用来区分类、域或方法。符号引用的校验用来验证引用是否有效,假如引用无效(例如,假如类不能载入,或者类存在但不含有要引用的域或方法),类文件校验器就会抛出1个错误。
  
    1.4 安全治理器和JAVA API
  
    安全治理器定义了“沙盒”的外部边界。安全治理器是类java.lang.SecurityManager的子类,它是自定义的。
  
    JAVA API类在采取一些行动时,通常需要安全治理器检查这个行动是否安全,这些行动包括:
    1.接受来自于特定主机的socket连接。
    2.修改线程(改变线程优先级,结束线程等)。
    3.开放对于特定主机的socket连接。
    4.创建1个新的类载入器。
    5.删除特定的文件。
    6.创建新的过程。
    7.程序退出。
    8.调用含有本地方法的动态库。
    9.等待连接。
    10.从特定的包载入类。
    11.给特定的包中添加1个新类。
    12.访问或修改系统特性。
    13.访问特定的系统特性。
    14.读文件。
    15.写文件。
  
    由于在执行上述动作前需要安全治理器进行检查,JAVA API不执行安全治理器建立的安全措施所禁止的任何动作。
  
    JAVA API执行1个可能不安全活动的过程,通常分为2步:首先,JAVA API代码检查安全治理器是否已安装。假如没有安装,就无法进行第2步的检查,则直接执行可能不安全的代码;假如安装了,就继续执行第2步的检查,调用安全治理器中合适的检查方法对动作进行检查,假如动作被禁止,检查方法就

Tags:JAVA 安全 结构

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接