实例分析JVM安全体系:双亲委派、命名空间、保护域、策略-Java开发Java经验技巧_第1页
实例分析JVM安全体系:双亲委派、命名空间、保护域、策略-Java开发Java经验技巧_第2页
实例分析JVM安全体系:双亲委派、命名空间、保护域、策略-Java开发Java经验技巧_第3页
实例分析JVM安全体系:双亲委派、命名空间、保护域、策略-Java开发Java经验技巧_第4页
实例分析JVM安全体系:双亲委派、命名空间、保护域、策略-Java开发Java经验技巧_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、epay didjvm°2e«iaip£oe«qxraeaiiauoa;0±£»n6d;02baodla3dx|£° iceaeterna6uaeae<<xraea£dfd®qo£-iieaead»iaaa%660pa5aai£oaa14660pax6a%ieq!4«dceeppaclassia14|3>u:%yi»da!4«iajavaaapaxouaex°eeauzae£20eu3e(

2、|o6|paclass(|oi6i£6a»§/,ed6f1yl4i3dclassloaderofd0dfindclass-aldaxopaaaododdodof-iijpaaododd 2azi£-dla£°(1) .圧引一 aa,4o60ie-i-(bootstrap classloader)£°«%660 /javahome/libooxbootclasspatheuojpaaiaiaijaaaial-eqwajava apipaclassia%6a6u2e6tjavadeaa»u(2) .

3、入 ©o 入玄0。0 圧三(extensionclassloader)£o,/4«%6d0/javahome/lib/extd6%oiajava.ext.dirseud/ir,paaa,/4l apaaaa(3) .6|6a3iddaa%6602e-j-(application/systemclassloader)£°«6d0classpathiaeiioj-|jaaaia£-»ddb3iaaaa-%(|%6d0l. e«cxiaeaapa%oo0«e16ae«(;xraema-,/2

4、e£-ix0dadaai|jae«(;x»0im20.qfi/4pdaxepldfeoooocsaojda-ieipafidoooiijfedoiou/java/lang/classloader.javaodf-iryclassloaderp anoi "ioeidj'aeaoo0£-(|0e6a»6do5;>%6d0£aqa«»a°nippaa%660appclassloaderxiaa-eipa5>%6d0private classloader(void unused,

5、classloader parent)this.parent = parent;protected classloader()/getsystemclassloader()this(checkcreateclassloader(), getsystemclassloader();%6d0daa|ja'4660p6aloadclass()-"e|nio£oprotected class<?> loadclass(string name, boolean resolve) ? throws classnotfoundexception? 7797979999

6、7/ first, check if the class has already been loaded99999999999class c = findloadedclass(name);99797977779/ iaaaa»ob±»660if (c = null) ? synchronized (getclassloadinglock(name)long to = system.nanotime();try? if (parent != null) ? / ie»oea a6o05:v3<:e6660? c = parent.loadclass

7、(name, false);? else ? /a aoo0£-?i c0£ z i bootstrapclassloader, aqa z 2' aaobeq - nob , aaa ? c = findbootstrapclassornula (name);? catch (classnotfoundexception e) ? / classnotfoundexception thrown if class not found? / from the non-null parent class loader ? ? /alfa“场660'瓦a吉

8、3;->6&6总场q 3©总6场660? if (c = null)? / if still not found, then invoke findclass in order? / to find the class? long tl = systemnanotime();? c = findclass(name);st ats/ this is the defining class loader; record thesun.misc.perfcounter.getparentdelegationtime()addtime(t1 一 to);sun.misc.per

9、fcounter.getfindclasstime().addelapsedtimefrom(t1);sun.misc.perfcounter.getfindclasses()increment(); ? ? ? if (resolve) ? resolveclass(c);? ? return c;? ? /,e%uexie»a%i2e aaaeq-non% ±»%6o0£-ieda»6d±»%6o0£-idd»arfdi5%6d00ddx°60£-id»6dp±

10、i4%oo0/eii> %oo0e±£-2a»ap-oaxoeipafindclass()-!40dd%oo0i£oanu±uaaaex6%6d02e%6o0d»d©edl%a°au(|¥hiedaeiaa|ja2»ieiiaa£-d22»»aeaxo%oo0 圧me¥epio,%oo0 圧 me|4lopa%oo0gxfi£±eeqa3d6a»§xd(|c dapaaa,46602e4-e6l,4%660d&

11、#187;5d,/dxdiojava.lang.stringj±idaaaf-iaqa-i/aaxiddr aeot aa%oo0bootstrapclassloader30eo%6o0£-'aaz6(|_ aa%6o0/e4-«!4oo0javaaplddpaj±java.lang.stringj±aa(|02»»ariy6a»§xo(|,dapaaa%6d02e-?e¥»npa°i ooodatieaoapaauaajf |n«eqd,z4ddaape&

12、#171;(;xraeed(id(i2»1»ma£-i%ueeda doa»§xdtdapaaa%6d oeoioood.odxdiava.lang.bombiiijaifldaaf-iaaoooip - %oo0 aaa£-aqaz%6o01nx«6eoa»§t oap a%od0,°ode|j ioj£oeouo »5oaapai-id»0uau|jaaa(0leax6aa)6do-aieaprotected3eo±£-ida56 j

13、6;java.lang.bombj±ddeauaieedaeiaapad»d©a65ddal0£-ieudd%i±0de «oa5daa6eedaeiaama aie6d oae£-ijavadeaa»ud»°ndanu±eze aie|iai0e aeipeu6e6ebd»5daa%6d06d0mafd»ouau|jaaadi£-danud»>66eh d»>daa%660%6o0maj0e66uhd»>d

14、°uma(|a5daadi1z4-ofeiaoedde±oui£2. auauiouaaaoooiaiph-iaaoooooopaaalaj-iijaauauidal-ii-iduau id%aaupaaaied6»¥iaaie£-i2»hauau£,d%a|jaaa2»dapa±etpa6u(3yi6eia1©aie»uo2e)j£i-id»aa/,eddou2»i-i|liaauauio%aau£-1|li«n>,o

15、ui-id»auaaid%aauo0/3didi£auauidaedanudaparepeieodoaapaxaodon-daaa%oooiooopaexridaeipaeuodooohoeaaodof -iad%660(jaauauid%a%ie(;eu6dd65a6d0/eia36e%aa,46d0|liaaaeiixe3ej£ ieddda%u£-x6%od0|jaauauid%aouaai5/xaiie%6d0paauauid% aold»6dxd,4o2aedd,4660maaaeuxe3ei£>u%y%6d0iaip

16、!4a,|jao2e«»ud£-i i-id»auauio%aau|liaaaed6»¥iaa!e£-euddbj4660eu%660paaa2»d»t7,edoaiex6%6o0eu %6o0maaa£-.p«x6%6o0eu%6o0paaa±0e»edoaiei5%6o0%6o0 paaj£5i%6o02e-r6o0paaa%i°aiiidiiax6£-ix6%6d0%6d0|jaaaeau6ap55%6d0%660maaa

17、3;-i%nnd»56z6iax6£-id»au°ndjiax6-a0 olaxoiu-yaxddj+eoepa-aied3 yfa)doxo%oepldp 入入 a%od0iaay£°package com.ice.classloader;import javaio.bytearrayoutputstream;import java.io.file;import javaiofilelnputstream;import java io filenotfounciexception;import java.io.ioexception

18、;import java.io.inputstream;publie class myclassloader extends classloader ? private string name; ? /oooau3? private string path = ne:workspaceclassloadertesth;?/oo0a-? private static final string home =ne : workspace wclassloadertestw11;? private final string classfiletype = 11. class11;? public my

19、classloader(string name) ? super ();? = name;? ? public myclassloader(classloader parent, string name) ? super(parent);? = name;? ? 0override? public string tostring ()? return ;? ? public string getpath()? return path;? ? public void setpath (string path) ? this pdth =

20、path;? ? override? public class<?> findclass (string name) throws classnotfoundexception? byte data = this.loadclassdata(name);? if (data = null)? throw new classnotfoundexception();? return this.defineclass(name, data, 0, datalength);? ? private byte loadclassdata (string name) ? inputstream

21、is = null;? byte data = null;? bytearrayoutputstream baos = null;/? system.outprintin(n? classloader:n + + n try toload11);9979797 f ry/aaaux»-fa-name = name . replace (11.11 z 11 n );is = new filelnputstream(new file(path + name +classfiletype);? baos = new bytearrayoutputstream ();?

22、 int ch = 0;? while (-1 != (ch = is.read()? baos.write(ch);? ? date = baos.tobytearray();? ? catch (filenotfoundexception e) /? e.printstacktrace();return null;9799999? catch (ioexception ioe) ioe printstacktrace()99797? finallytryisclose();9999999999q9999baosclose();catch (exception e2)9979797? ret

23、urn data;? ? public static void main (sti?ing args) throws exception ? /wipaipi 3oo0-? myclassloader father = new myclassloader (11 father11); ? father.setpath(home + nsyslibh;myclassloader child = new myclassloader(father,fchildh);? child. setpath (home + ,fextlf);myclassloader user = new myclasslo

24、ader ( nuser,f); user .setpath (home + ,fusrn);system, out printin (,f /2令总e场嵐三10壬卩 traverseparent(child);test parentifchildsystem out.printin(n);/2aeo6o0test load begin fromtesttest(child); /eoauauioanamespace? testnamespace(user);system out.printin ( n,f);? ? public static void traverseparent(clas

25、sloader loader) throws exception? if (loader = null) return;? system.out.printin(ntravase classloader:n + loader.tostring();? while (loader.getperento ! = null) ? system.out.printin(loadergetparent();? loader = loader.getparento;? ? ? public static void test(classloader loader) throws exception ? cl

26、ass<?> clazz =loader. loadclass (,fcom. ice . class loader. loadedclass11);? object object = clazz.newlnstance();? ? public static void testnamespace (classloader loader) throws exception? c"ss<?> clazz = loader. loadclass ( ncom< ice classloader loadedclass11);? object object =

27、clazz.newlnstance();try? loadedclass lc = (loadedclass) object;? catch(exception e) ? e-printstacktrace();? ±»%oo0aaloadedclasspa(|r dae?ia£°/±»w60aapackage com.iceclassloader;public class loadedclass ? public loadedclass()? sys tem. out. pri ntl n ( "loededcldss i

28、s loaded by: 11 ? + this.getclass().getclassloader();? (d.exraeuchild%6o0»ar idfatherddooof-edfatherpaoooaiaiaduxad 6|paclassia%t)£->od»a6e 55%6o04-father0dd(|o6|pa,/i6o01nx4-(fatherd2»a!»6eappclassloaderofext classloadereoddooof-paaodo圧三2 好0%i 入応丹oo0£ 创 00°6

29、87;衣0%。3 注o%0dd%oo0)test parenttravase classloader:childfathersun.mlsclauncher$appclassloader1372alasun.misc.launcher$extclassloaderad3ba4test load begin from child loadedclass is loaded by: fatherpifatherpaoooaaiaaddolpaclassi 入»£。6滋»olchild%0dd%oo0test parenttravase classloader:chil

30、dfathersun.misc.launcher$appclassloader1372alasiin.misc launcher $extclassloaderad3 bai4test load begin from childloadedclass is loaded by: child(2).auauo!4a>oaeoeoumyclassloadereiylili 即 a (o'oaddaaodo/aaaiodoo 。0卩入)£勺0loadedclasseoeuser%6d02e4-eu%6d0pa£-iappclassloader%6d04-euser

31、%000辰卩入"000亦£t总陆必000亦000必恥myclassloaderll5- ux6%6d0-j-usereu1/46d0paloadedclassaa£-'dumyclas sloaderod3eoepay» loadedclassaie±%i»a3oioegiaziio£°test namespaceloadedclass is loaded by:exception in thread nmainn javalang.noclassdeffounderror: com/ice/classlo

32、ader/loadecaused by:at com.ice.classloader.myclassloader.testnamespace(myclassloade工java:129) at com. ice . classloader .myclassloader .main (myclaissloader1 java: 107):java lang classnotfounciexcepmn: com. ice . classloader . loadedclass j ava .net .urlclassloader$l run (urlclassloaideh .java: 200)

33、at java . security .accesscontroller . doprivileged (nat;* pmhod) at j ava net urlclassloader f indclass (urlclmssloaideh .java: 188) at j ava lang classloader loadclass (clatssloade工.java: 307)at sun.misc.launcher$appclassloader.loadclass(laxincher.java:301) at java.lang.classloader.loadclass(class

34、loaderjava:252)at java.lang.classloader.loadclassinternal(claissloader.java:320)oopo aoyeq30eoep ay» loadedclassaap aao»ddtry loadedclass lc = (loadedclass) object;(catch (exception e) (3).oedde±°uaaeif-iappclassloadera-iaadp±(eq6%6o0d»56com.ice.classloader.virus5aaa(ia

35、classia,/4|)£-iaaxattaker%6604-16«»a1/i6o0da5dvirusaa£->20o|je%aiacom.ice.classloaderpao»2-d£-'4aaateda»nejcom.ice.classloader0iiia±»daeiaapa-aiee,*it>j£p«6e6ue,it>,4i2ee±£-»6e6u>av irusaaoeattackerooo-qappclassloa

36、derl4660£-i1e(|6myclassloadereu±£»n3e6±pa-aiel/6«»a±»xed1j£package com.iceclassloader;public class virus ? publie virus()? system.out.println(“virus is loaded by: n ? + this getc:l3ss() getclassloader ();? myclassloader cl = (myclassloader)this.getcl

37、ass()getclassloader();? system, out pri nt in (11 secret is : n + cl. secret); ? myclassloader6eappclassloadereii,4660£-i(f0virus6eoa»§xdt da(ja%6d04-attackereu% 6d0£-ieae»appclassloadereqattacker pa>5146d0£-%zmyclassloadedvirusie%u£-m«6e6uadb2»e(;6ebd

38、»id %6d0eu%6d0£->,4z2»e66ui-id»56dedde±°u£-ia(;axvirus(|dmyclassloaderpaeu±£»n3e6±-aieeuippublic class myclassloader extends classloader ? protected int secret = -1;/.? public static void main(string args) throws exception ?4 000-r i boot st

39、rap classloader? myclassloader loader = new myclassloader (null, ,floader,f); ? loader. setpath (home + ,fusrh);? myclassloader attacker = new myclassloader (11 attacker,f);? attacker.setpdth (home + hattdckerw);? system.out.printin(myclassloader1s classloader:h + myclassloader.class.getclassloader(

40、);? sys tem. ou t .pi: in tin ( ”testparent,f);? /2色总<5»»场660庄三10工卩test in-package? traverseparent(attacker);? system.outprintw access,f);? testvirus(attacker);? ? public static void traverseparent(classloader loader) throwsexception? if(loader = null) return;? system.out.printin(htrmvm

41、se classloader:n + loader.tostring();? while(loadergetpurent()!= null) ? system.out.printin(loadergetparent();? loader = loader.getparent();? public static void testvirus (classloader loader) throws exception ? class<?> clazz =loader. loadclass ( ncom< ice classloader . virus11);? object ob

42、ject = clazz.newlnstance();? ? myclassloader1s classloader:sun.misclauncher$appclassloader1372alatest parent travase classloader:attackersun.mlsclauncher$appclassloader1372alasun.misclauncher$extclassloaderad3ba4test in-package accessvirus is loaded by: sim.misclauncher$appclassloader1372alaexceptio

43、n in thread nmainn javalangclasscastexc己ption: sun.mlsclauncher$appclassl at com.ice.classloader.virus.<init>(virus.java:8)at sunreflect.nativeconstructoraccessorlmpl.newinstanceo(naxive method)at sun reflect. nativeconstructoraccessorlmpl newlnstance (neidvecons匸rue匸ozac at sunreflect.delegat

44、ingconstructoraccessorimplnewlnstance(delegatingconst; at java.lang.reflect.constructor.newlnstance(constructorjavai:513) at javalangclassnewinstanceo(class.java:355)at java. lang. class .newlnstance (class javai: 308)at com.ice.classloader.myclassloader.testvirus(myclassloadei;java:120)at com. ice

45、. classloader .myclassloader .main (myclaissloalde工 java: 104)x0oaauaii/,d1/iapa:i6ae6eoedde±ou:i6aepa0±d£->2»i-«auaiio%apaaao®%a2»e%u£-(|0hd»auauid%aaupaaaieau6e2»bpa%6d00dd%6d0£-e 淬丁 aa'oooooo|liaoedajavaapioi6a»§xotda%6d0/e%6

46、60|jaaa£-dad©aa%oe±euatdaiahd»>dou£-m«eq6eou2»e(;6ei-id»id%6d0/e%6o0|j 入是oedde±°u£-aqa 2»i-八 八 x 、 x 八 x 入“八 八八 oedde±°uaupaaao®%a%r<eou(|ooue%u3eo±paaieipoi£3.2bao6e±£»n6d 3yaeauauio%ap入入化,6入0。

47、危(片入即入总。入入金±£»口£入金。00代三直加小总z xkx -八八/ 八 4、入 s x八/ 八"qoa±£»nodaloazuaeouoedde±ieoo»npa|jaej£bnuouoid±£»nodo ®o£-ieaeaaajavadeaa»upao2e«.aiei0d2%o2baoi£javapae3iaa£diiedd6e6a>>§xdtddaeqf1y6a&

48、gt;>§tde3ia|jao2e<<1uai(securitymanager)aldae3ia|iao2e<<±b9£-.d6la3iddoeddoj oa»§xdloa|jao2e«2badolaiei0oi£6|6a3iddriysystem.setsecuritymanagero/-djava.security.manageri+a'oi'vyeot °2e«1uai/e-£a护土javaapiozddd»d©/,eau2

49、»o2e«|lia2uxe±£-ie?(|dia%t)|ia(iadzoie%3y|ie£-%i»a tdo2e«1uai0ddet%i2e£-e6e!p%i2e2»f1y£-,z6«»aax3dd»>do2e«di3££-e6e- ip%i fyf-odoediaxpao dd;£ ±eeqzz!/2'd»36fileinputstreame±£->»ap

50、4-6asecuritymanagerpacheckread()!40ddaeieippapef0public fileinputstream(file file) throws filenotfoundexception ? string name = (file != null ? file getp3th() : null); ? securitymanager security = system.getsecuritymanager(); ? if (security != null) ? securitycheckreud(name);? ? if (name = null) ? t

51、hrow new nullpointerexception();? ? fd = new filedescriptor();? fd incrementandgetusecount();? open(name);? checkread()!4 ooat x-?p afilepermissionia2ieyp 4-6acheckpermission()public void checkread(string file) checkpermission(new filepermission(file,securityconstants.file_read_action);jdk 1.2°

52、3e±%°&£1 汩 00 电 © 入 checkpermission (permission perm)°icheckpermission(permission perm, object context)a0dden>i2e£aodpermiaqeq6ozdd2ux-reiidedapaeil>£e9java. io.filepermissiono j °/usr/indata.txti±e6joreadj±2ux-bj£checkpermission()ep%e

53、eldu(|6p±(oib3i|ja!4-'o »!/20ddoa»ao»5daie0d»%3accesscontrolcontext£y 即 moa 圧 acheckpermission()!4publie static void checkpermission(permission perm) ? throws accesscontrolexception ? /system.err.printin(ncheckpermission n+perm);? /thread.currentthread()dumpstack();

54、? if (perm = null) ? throw new nullpointerexception ( npermission can 11 be null11);? accesscontrolcontext stack = getstackaccesscontrolccmtqxt(); ? / if context is null, we had privileged system code on the stack. ? if (stack = null) ? /.debug话0? return;? accesscontrolcontext acc = stack.optimize()

55、;? acc.checkpermission(perm);? checkpermission()»az6j/2- *|jad»(|¥idd»px±eau(,4i2ej/4-'eu6uaa|ja±£»n6de'ip£ -<contexteqd»5dprotectiondomaineyxe)£-'p±6dp!d»>da»6de,if>pad»dj%i»aax3od»5daccessc on

56、trolexceptionj£14z(|d6ud»ideda0dde,ii> 八八八 艺"八八 、x 八xa 艺 八pepaaiefoouaaiepa |naa/,o»5d|lioa2azi(|f%±0de%bod(oo;paai 入、 ee ir£oe ipinaadfeqf yimpliesoa'ddiliafiimpliesodupermissionaajpermissio ncollection j protec tiondomain aaodeu a-j- j £oi?permissionaa(%bi

57、ae|i i op axo aa) od£ a-e-t oeaperrnissioneuipadlofeq-ndaeadflpaper mission(|di6pae ipdd£-ieqo j 土/test/* i ±aa%p aad 它 iptestallpermissionf-id-iaedi ±/test/test.txtj ±1 testfilepermission£-i%ztestallpermission.implies(testfilepermission) paoplatrue£-'-zo®

58、iafalsej£?dljprotectiondomain(/eapermissioncollection)od£-> «0dde it>%-°iau impliesopaadff-iep'/ieeifeoupermissioncollectionddieau+fodeiiopo dpaeip£-ip6aimplies()adt7eae(;n%b6d(|ld6|jaa!eeipi£public void checkpermission(permission perm) ? throws accesscontrolexception? ? ii.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论