作者wctang (wctang)
看板java
标题Re: [问题] java applet access 本机档案
时间Sun Apr 1 23:06:40 2007
※ 引述《fishlet (没时间啊...)》之铭言:
: 板大您好 那篇其实我已经看过了
: 但还是觉得蛮疑惑的 如果只要按同意
: 那教学网页里头 第6-8项步骤是什麽时候完成的呢?
: 是end user点同意以後就自动做好了吗?
: 还是其实不需要建什麽policy file?
: 麻烦你了..
其实你看的资料里面提到 policy file 是有其用意的,这是 java security 的一环。
不过一般来说,如果你只是要让 applet 可以存取 client 的档案,那就照着
(ptt) 做就行了。
基本上,java 在执行时分成两种 mode ,一种是有 security manager
(-Djava.security.manager),另一种就就是没有 security manager。
一般你在自己电脑上执行时就是没有 secuirty manager 的模式,在这个模式下所执行
的程式没有任何限制,想干嘛就干嘛,像存取档案,开 socket 都可以。
但如果你在 secuirty manager 模式下执行时,就要看 secuirty manager 允许你干嘛
你才能干嘛。而在 browser 下执行 java (也就是在 browser 下执行 applet) 时就是
在 security manager 下执行。而你怎麽知道 secuirty manager 允许你干哪些事呢,
简单来说就是看 policy file 来设定 (复杂来说也可以用程式的方式来做动态而精细的
设定)。除非你特别指定,不然预设使用的 policy file 就是
<JRE_HOME>/lib/security/java.policy
这个档案详细的说明可以看
http://java.sun.com/j2se/1.4.2/docs/guide/security/PolicyFiles.html
以下再来解释 browser 执行 applet 预设的行为。如果你都没改动预设的 policy 的话
,预设的情况是:
* 首先,jre 本身的程式当然是要干嘛就可以干嘛。
* 再来,你放在 <JRE_HOME>/lib/ext 下的程式也是要干嘛可以干嘛 (所以把程式放这
个地方要小心)
* 至於其他的程式,除了一般无关痛痒的动作 (像是取得 java 版本,os 版本,当然一
般的 memery cpu 也都可以),其他的动作通通不行 (存取档案不行,乱开 socket 不
行等等)。至於哪些可以,看 policy 就知道。
可是在 browser 下这样的安全性就很不方便了,所以 java 给 broswer 的 plugin 实作
中,在拒绝之前会先判断一下,如果要执行的程式没有 sign 过,那就完全不行了,如果
要执行的程式有 sign 过,那就会看看用来 sign 的凭证是不是你所信任的,然後不管信
不信任都会 pop 个视窗要使用者同意执行。如果使用都同意,那就允许执行。以此来看
,不管 code 是用什麽凭证来 sign,都逃不过那个 pop 的视窗,顶多有信任的凭证显示
的讯息会好看点。
那要怎麽让他不 pop 那个讯息? 就必需变动执行端 (client 端) 的 secuirt manager 的
设定 (简单说也就是 policy 的设定)。你可以做个实验,把上面说的预设的 policy file
改一下,把
grant {
下加一行
permission java.security.AllPermission;
存档,再执行任何 applet,你想干麽都不会有任何讯息出来烦你了。
玩完要改回来,不然上网乱逛超危险哦。
以上如果有什麽地方有错请告诉我,有些地方是我的理解,没有十足的把握。
虽然 java secuirty 很冷门,不过当练功也是不错,会一些比较少人会的东西。
如果有兴趣多了解,请参考 Java Security (Java 安全防护),看完就没有任何秘密了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.127.119.48