Re: [問題] java applet access 本機檔案

看板java作者 (wctang)時間19年前 (2007/04/01 23:06), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/6 (看更多)
※ 引述《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
文章代碼(AID): #163yg1tb (java)
討論串 (同標題文章)
文章代碼(AID): #163yg1tb (java)