Java何以保網(wǎng)絡安全

字號:

Java是惟一一種從設計的開始就考慮安全性的移動代碼。雖然并不完美,Java卻在程序的功能性和保護主機的安全性兩方面達到了的平衡,并且Java非常適合將代碼從一個平臺向另一個平臺的移植。
    Java采用一個稱為“sandbox”的模型來運行移動代碼。不被信任的移動代碼只能在sandbox中運行而不能進行多數(shù)針對主機的操作,比如讀、寫或刪除文件,監(jiān)聽或接受網(wǎng)絡連接等等。
    當瀏覽器加載含有Java Applet的頁面時,它從Web服務器上取Java的字節(jié)代碼,然后將代碼傳給稱為字節(jié)代碼檢驗器的Java部件。檢驗器確保字節(jié)代碼有正確的格式,不會超出內部堆棧的邊界,這就防止了程序的崩潰。第二個Java部件——類加載器,決定一個Java applet在何時、以何種方式將代碼加入正在運行的Java環(huán)境,保證此applet不會取代任何系統(tǒng)級別的內容。(每一個Java程序由一個或多個類、數(shù)據(jù)對象以及如何操作數(shù)據(jù)的方法所組成。)
    最后,還有第三個部件稱為安全管理器,當一個有潛在危險的方法試圖運行時,安全管理器就會起作用。是否運行這種有潛在危險的方法取決于需求此種方法的類來源于何處。舉例來說,內部本身的類比通過網(wǎng)絡獲取的類具有更大的特權。(因為這一原因,要注意千萬不要將不明出處的類通過將其路徑放在系統(tǒng)的CLASSPATH下而成為內部本身的類。)
    由此可見,字節(jié)編碼檢驗器、類加載器和安全管理器使得Java程序高效而安全。即使這樣,任何一個部件中的編程錯誤都會導致安全問題。這就是為什么某些攻擊只是針對某一個特定廠商的JVM,這是因為并不是Java本身的安全模型出了問題,而是因為實現(xiàn)這一模型的方法出了問題。
    隨著Java程序的復雜化、實用化,必須要脫離“sandbox”運行。這可以通過Java開發(fā)工具包JDK(Java Development Kit )1.1來實現(xiàn),JDK在系統(tǒng)中擴展了加密的API,并且支持數(shù)字簽名。在Java文檔中(.JAR文件)的applet可以通過簽名來保護,允許最終用戶知道程序是來自可信任的地方,并且未經過任何修改。通過JDK1.1,如果用戶通過簽名確信applet代碼來自可信任的地方,便通知瀏覽器和JVM將獲取的代碼與本地代碼同樣對待,獲取完全的權限。
    Java 1.2(后來更名為Java 2)在安全方面更進一步,它提供權限不同的模型來運行不同的代碼,也就是說,不管是本地代碼、下載的信任代碼或下載的非信任代碼都可以在不同的特權環(huán)境中運行??偟恼f來,Java的安全漏洞較少,尤其是Java 2 ,在安全和性能兩方面都有很大提高。