作者wctang (wctang)
看板java
标题Re: 重来一次... lol
时间Tue Aug 21 21:30:22 2007
※ 引述《pepsicola (空白待续)》之铭言:
: 我是看这个link的http://0rz.tw/e12XN
: 我照前面五步做完 结果失败
: 所以我误以为要完成後面ray要做的那几步才能写档案
: 结果就是我完全搞错方向
: 我在code里写了一个public的method让xsl去直接呼叫他
: 用这个方式来直接把applet里面的资料写到硬碟
: 之前是照里面开Allpermission
: 如果是这种状况的话 有办法解决吗
: 还是我这种写法根本上就是有问题的?
让我们把问题一层一层仔细说吧,知道原因也就不会只能看着教学文件一步一
步做,出了问题也没办法找。只谈观念,实际步骤还是照着(ptt)做就是了
。
Browser 中的 applet 其实就是 Browser 把 class(jar) download 下来後,再
启动 java 去执行 download 下来的程式,但因为从网路上 download 程式码来
执行是很危险的事,所以 java 一开始就把这一部分的安全设计得很严密。java
在执行时有两种模式,一种是有启动 Secuirty Manager,另一种是没有启动
SecuirtyManager 的,一般写程式在自己电脑上执行是没有启动 SecuirtyManager
的,这个情况下不论程式写什麽,java 都会照着执行 (像是把自拍照传给别人
之类的),因为程式是你写的,不需要还让你绑手绑脚的,但其实如果你怕一时手
滑把自拍照传出去,或是你用到其他人写的 library 而你并不信任他,那其实
还是可以把 security manager 给打开(加上 vm 参数 -Djava.security.manager)
,你就会发现你就像被关在 applet 里一样失去办事的能力了。所以到这里你就
可以了解 applet 会有这麽多限制并不是因为他是 applet,而是因为 Browser
在执行他的时候是开着 security manager 的。
至於打开 "SM" 的情况下你到底能做什麽? java 大发慈悲让你可以使用 cpu,可
以配置记忆体,可以读一些和 java 有关的环境变数,如果是 applet 的话画画
图,连回 server 抓资料,大概就这些了,详细情况去 trace 一下 jre 的
source code,当你发现在做某些动作时他有去问一下 SecurityManager 老大时,
那大概你就不能做了。虽然说 SecurityManager 是老大,但他终究还是听你的话,
SecurityManager 是根据 <jre>\lib\security\java.policy 里的设定来做限制的
。至於怎麽修改,就参考(ptt)那篇很乱的 Z-5-2-8 吧。有慧根的好奇宝宝
或许会问,如果在 "SM" 时不能读写档案,那 jre 怎麽去 load 档案系统中的 jar
档呢?答案是 "SM" 是看人欺负的,jre 本身和 "SM" 是一伙的当然不会被限制,
而放在 <jre>\lib\ext 里的程式也都是和 SM 同伙的,而你写的程式就会被欺负了。
所以你可以把你的程式也放到 <jre>\lib\ext 里,这样你也可以和 "SM" 做好朋友。
以上就是 java security 最基本的架构。好奇宝宝或许又要问,为什麽要弄得这
麽复杂呢?其实就是 java 从一出身就背负着光复网路执行环境的大任,所以必需
非常重视安全性这一块。除了像是 applet 这种情况外,像是 application server
也常会把 "SM" 打开,不然我写一个 servlet 把所有其他人的 service 全搞烂这
还得了。
接下来再谈一下 Browser 上 run applet 的问题。我说既然因为有 "SM" 的关系而
失去办事的能力,那为什麽把 code sign 一下就又可以了?原因是因为要每个使用
者都去和 "SM" 谈一下太麻烦了,所以 java 在 browser 的 plug-in 执行 applet
而想办事被拒绝後,会看一下要执行的这个 code 有没有被 sign 过,如果有 sign
过,就问一下真正的老大是不是要让这个家伙办事,也把要办事的这个人显示给你
看(也就是那个 pupop 视窗了)。为什麽有这个行为呢?是因为 code 被 sign 过表
示确定是个有名有姓的人产生这个程式,而且做出来後没有被别人篡改过,这样
这个程式还算有被信任的资格,至於到要底不要让他办事还是要问你才行。而去
sign code 的那把 key 也是有所差别,遇到一把随便做出来的 key,SM 在问你时
口气会不太好,如果是个比较有来头的堂口所用的 key 的话,SM 在问你时口气会
比较好一点,但不管怎麽有来头的堂口,一定还是要问过你才能办事的。所以让大
家知道,"SM"的存在是善意的,让大家不会随便就把别人肚子搞大…,啊不是,是
要建立一个安全的执行环境。
不知道这样会不会比较好懂一点?再怎麽说也不会比书上清楚,大家看书吧:)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.127.126.95
1F:推 moonjuice:好详细喔~~ 09/21 21:20