Discussion:
[問題] java applet access 本機檔案
(时间太久无法回复)
沒時間啊...
2007-03-31 13:54:59 UTC
Permalink
想請問一下 各大相簿網站的上傳網頁
常常會有一些圖形化的介面 秀出使用者本機的資料夾清單 讓使用者點選
比如說像外國的Myheritage 上傳頁面大概就長這樣:
Loading Image...
這種功能應該是用 java applet做的吧?
可是我上網查了一下 java applet access本機檔案系統的方法:
http://java.sun.com/developer/technicalArticles/Security/Signed/
上面的意思應該是說 server端 可以對要發行的applet做簽證
然後產生一個certificate檔 給使用者下載回去做認證
但如果applet要得到access使用者檔案系統的權限
還得要麻煩使用者去建一個policy file 指定這個認證可以有什麼程度的權限
感覺上相當麻煩
但為什麼進入Myheritage的那個上傳頁面以後 他只有問我要不要安裝那個applet
我同意以後 它就可以show出我系統裡的檔案&資料夾清單呢
是有別的方法能夠在我點下同意安裝的選項時 同時自動幫我產生policy file嗎?
還是有另外的做法呢?
講的有點落落長 還請各位先進不吝指教

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.29.131
沒時間啊...
2007-03-31 14:53:44 UTC
Permalink
板大您好 精華區那篇其實我已經看過了
但還是覺得蠻疑惑的 如果只要按同意
那教學網頁裡頭 第6-8項步驟是什麼時候完成的呢?
是end user點同意以後就自動做好了嗎?
還是其實不需要建什麼policy file?
麻煩你了..

※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: 還是來回一下好了
: ※ 引述《fishlet (沒時間啊...)》之銘言:
: : 想請問一下 各大相簿網站的上傳網頁
: : 常常會有一些圖形化的介面 秀出使用者本機的資料夾清單 讓使用者點選
: : 比如說像外國的Myheritage 上傳頁面大概就長這樣:
: : http://www.csie.ntu.edu.tw/~b89022/uploader/Myheritage_image_upload.JPG
: : 這種功能應該是用 java applet做的吧?
: : 可是我上網查了一下 java applet access本機檔案系統的方法:
: : http://java.sun.com/developer/technicalArticles/Security/Signed/
: : 上面的意思應該是說 server端 可以對要發行的applet做簽證
: : 然後產生一個certificate檔 給使用者下載回去做認證
: : 但如果applet要得到access使用者檔案系統的權限
: : 還得要麻煩使用者去建一個policy file 指定這個認證可以有什麼程度的權限
: 不太清楚你的「使用者」是指
: 製作出來的軟體的使用者(以下稱為 end user)
: 使用 Java 寫 applet 的人(以下稱為 developer)
: 總之,applet 要作一些超出預設允許範圍的事情
: 那你就得把你製作出來的 applet(jws 也一樣)作加簽認證的動作
: end user 只要勾選「同意」就可以了
: 所以,對於 developer 來說,每次程式變動,是的確要重新加簽認證的動作
: 但是 end user 不用建立啥東西,只要同意 or 不同意而已
: 你可能要把原始網頁看的更仔細一點
: 至於製作方法,精華區裡頭有
: : 感覺上相當麻煩
: : 但為什麼進入Myheritage的那個上傳頁面以後 他只有問我要不要安裝那個applet
: : 我同意以後 它就可以show出我系統裡的檔案&資料夾清單呢
: : 是有別的方法能夠在我點下同意安裝的選項時 同時自動幫我產生policy file嗎?
: : 還是有另外的做法呢?
: : 講的有點落落長 還請各位先進不吝指教

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.172.182
夏傑
2007-04-01 05:13:21 UTC
Permalink
: : 但是 end user 不用建立啥東西,只要同意 or 不同意而已
: : 你可能要把原始網頁看的更仔細一點
: : 至於製作方法,精華區裡頭有
關於applet存取本機的問題~可以搞訂~~要弄數位簽證~~網路上有
用google可以找的到~~我也是這樣做

--
◎龍貓資訊天地(bbs.mgt.ncu.edu.tw)
◎[vrgigi]From: 211.23.91.164
wctang
2007-04-01 15:06:41 UTC
Permalink
※ 引述《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

Loading...