張際蘭
自從Java技術(shù)出現以來(lái),有關(guān)Java平臺的安全性及由Java技術(shù)發(fā)展所引發(fā)的新的安全性問(wèn)題,引起了越來(lái)越多的關(guān)注。目前,Java已經(jīng)大量應用在各個(gè)領(lǐng)域,研究Java的安全性對于更好地使用Java具有深遠的意義。本文主要從兩個(gè)方面闡述了Java的安全性:一是Java平臺(主要通過(guò)JDK)的安全完備性;二是Java虛擬機的安全機制。
Java平臺提供的原始安全模式是沙箱模型。對于從開(kāi)放網(wǎng)絡(luò )中得到的不被信任的代碼,該模型提供了一個(gè)非常嚴格的使用環(huán)境。沙箱模型的實(shí)質(zhì)在于信任本地代碼,使其可以完全訪(fǎng)問(wèn)重要的系統資源(例如文件系統);而對于下載的遠程代碼則不被信任,因此只能訪(fǎng)問(wèn)沙箱內提供的有限資源。沙箱模型通過(guò)Java開(kāi)發(fā)工具包(JDK)發(fā)布,一般被用 JDK編寫(xiě)的應用程序所采納(包括支持Java的網(wǎng)絡(luò )瀏覽器)。

Java開(kāi)發(fā)工具JDK 1.2 中引入了新的安全體系結構(如圖1所示),安全檢查擴展到所有Java程序,包括應用程序及Applet。所有本地代碼均可信任的概念已不再存在。相反,本地代碼的安全控制與Applet的類(lèi)似。當然,必要時(shí)本地代碼(或遠程代碼)上的策略仍有可能被聲明為具有最大自由權,從而使之類(lèi)似完全可信任的代碼那樣高效運行。同樣的原則適用于簽名的 Applet 和所有Java應用程序。
Java沙箱是運行Java小應用程序的一個(gè)軟件單元,對Java小應用程序的訪(fǎng)問(wèn)權限加以限制,防止它訪(fǎng)問(wèn)計算機的關(guān)鍵部分,如磁盤(pán)驅動(dòng)器、網(wǎng)絡(luò )套接口和內存區。Java沙箱由三部分組成:字節碼檢驗器、類(lèi)裝載器和安全管理器,這三部分共同完成裝載和運行時(shí)對Java Applet的檢驗,用以限制對文件系統和網(wǎng)絡(luò )的訪(fǎng)問(wèn)以及對瀏覽器內部的訪(fǎng)問(wèn)。
Java程序可以從網(wǎng)絡(luò )上下載運行,這必然帶來(lái)許多不安全因素。一些惡意的Hacker可以直接寫(xiě)出字節代碼段攻擊用戶(hù)節點(diǎn),如刪除文件、搞亂硬盤(pán)或未經(jīng)用戶(hù)許可在網(wǎng)上發(fā)送本地信息等。這些防衛本地機被攻擊的任務(wù)就交給了Java虛擬機完成。Java虛擬機提供了幾種安全機制,其中兩種主要的機制是安全管理器和Java類(lèi)文件認證器。
安全管理器是安全的實(shí)施者,它是一個(gè)可擴展類(lèi),提供加在應用程序和特殊系統上的安全措施。它實(shí)現Java虛擬機的安全策略。安全管理器建立Java程序的名空間,限制對網(wǎng)絡(luò )、本地文件系統和程序其它部分的訪(fǎng)問(wèn)。
Java認證器在.class文件運行前完成該文件的安全檢查,確保Java字節碼符合Java虛擬機規范。Java平臺通過(guò)使用認證器查看類(lèi)文件的句法和詞法的正確性,檢查版本及API符合性等,保證病毒和其它惡意程序不會(huì )侵犯本地系統。認證器包括四個(gè)階段的操作:類(lèi)文件認證、類(lèi)型系統認證、字節碼認證和運行時(shí)類(lèi)型的訪(fǎng)問(wèn)檢查。此外,認證器在檢查期間還能識別算法操作的上溢和下溢等其它可能發(fā)生在運行期間的程序錯誤。
Java虛擬機是加在當前主機操作系統上的,由于Java字節碼執行速度目前要比本地機器慢10~20倍,速度問(wèn)題可能是影響Java推廣的惟一原因。目前,針對Java虛擬機程序速度慢的問(wèn)題, Microsoft,Borland等提出了及時(shí)編譯技術(shù)(Just-In-Time)JIT。具體說(shuō),就是JIT編譯器在程序開(kāi)始執行前把所有字節碼翻譯成本地機器碼,然后再將翻譯后的機器碼放在CPU上運行。這樣,就用字節碼編譯器代替了原來(lái)的解釋器,它對用戶(hù)透明而又提高了執行速度。也許將來(lái)JIT編譯器加到Java虛擬機中,可以解決所有性能問(wèn)題。
聯(lián)系客服