精華區beta java 關於我們 聯絡資訊
※ 引述《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