Java何以保網路安全(轉)

BSDLite發表於2007-08-15
Java何以保網路安全(轉)[@more@]  Java是惟一一種從設計的開始就考慮安全性的移動程式碼。雖然並不完美,Java卻在程式的功能性和保護主機的安全性兩方面達到了最大的平衡,並且Java非常適合將程式碼從一個平臺向另一個平臺的移植。

  Java採用一個稱為“sandbox”的模型來執行移動程式碼。不被信任的移動程式碼只能在sandbox中執行而不能進行多數針對主機的操作,比如讀、寫或刪除檔案,監聽或接受網路連線等等。

  當瀏覽器載入含有Java applet的頁面時,它從Web伺服器上取Java的位元組程式碼,然後將程式碼傳給稱為位元組程式碼檢驗器的Java部件。檢驗器確保位元組程式碼有正確的格式,不會超出內部堆疊的邊界,這就防止了程式的崩潰。第二個Java部件——類載入器,決定一個Java applet在何時、以何種方式將程式碼加入正在執行的Java環境,保證此applet不會取代任何系統級別的內容。(每一個Java程式由一個或多個類、資料物件以及如何運算元據的方法所組成。)

  最後,還有第三個部件稱為安全管理器,當一個有潛在危險的方法試圖執行時,安全管理器就會起作用。是否執行這種有潛在危險的方法取決於需求此種方法的類來源於何處。舉例來說,內部本身的類比透過網路獲取的類具有更大的特權。(因為這一原因,要注意千萬不要將不明出處的類透過將其路徑放在系統的CLASSPATH下而成為內部本身的類。)

  由此可見,位元組編碼檢驗器、類載入器和安全管理器使得Java程式高效而安全。即使這樣,任何一個部件中的程式設計錯誤都會導致安全問題。這就是為什麼某些攻擊只是針對某一個特定廠商的JVM,這是因為並不是Java本身的安全模型出了問題,而是因為實現這一模型的方法出了問題。

  隨著Java程式的複雜化、實用化,必須要脫離“sandbox”執行。這可以透過Java開發工具包JDK(Java Development Kit )1.1來實現,JDK在系統中擴充套件了加密的API,並且支援數字簽名。在Java文件中(.JAR檔案)的applet可以透過簽名來保護,允許終端使用者知道程式是來自可信任的地方,並且未經過任何修改。透過JDK1.1,如果使用者透過簽名確信applet程式碼來自可信任的地方,便通知瀏覽器和JVM將獲取的程式碼與原生程式碼同樣對待,獲取完全的許可權。

  Java 1.2(後來更名為Java 2)在安全方面更進一步,它提供許可權不同的模型來執行不同的程式碼,也就是說,不管是原生程式碼、下載的信任程式碼或下載的非信任程式碼都可以在不同的特權環境中執行。總的說來,Java的安全漏洞較少,尤其是Java 2 ,在安全和效能兩方面都有很大提高。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-959726/,如需轉載,請註明出處,否則將追究法律責任。

相關文章