一:為什么需要安全性
1:因為網絡允許多台計算機共享數據和分布式處理,所以它提供了一條侵入計算機系統的潛在途徑,使得惡意用戶可能竊取信息,改變或者破壞信息,盜取計算機資源等。因此計算機連入網絡很容易產生安全問題。
2:如果在一個環境中,軟件可以通過在網絡中下載並且在本地運行,這個問題尤其嚴重。比如Applet 和Jini服務對象就是這樣的例子。因為當用戶在瀏覽器打開網頁時,Applet的Class文件會自動下載,很有可能用戶會遇到來自不可靠來源的Applet。
3:當一個Jini服務對象用JiNI查找服務進行服務注冊時,它的Class將從服務供應商指定的代碼庫進行下載。Jini實現了一個自發的網絡互連,客戶機進行一個新的環境查找並訪問本地服務。因此JINI可能會遇到來自不可靠的服務對象。
如果沒有任何安全機制,這些自動下載的模式為惡意代碼發布提供了便捷的途徑。JAVA的安全機制使得JAVA適用於網絡,因為它們建立了堆網絡移動代碼安全秩序必要的可信機制。
二:JAVA沙箱的基本組件
1:類加載器結構
它防止了惡意代碼去干涉善意的代碼,這是通過為不同的類加載器裝入的類提供了不同的命名空間來實現的,命名空間互相獨立。
它守護了被信任類庫的邊界,這是通過分別使用不同的類加載器裝載可靠的包和不可靠的包來實現的。
它將代碼歸入某類(命名空間),該類確定了代碼可以執行哪些操作,一個保護域定義了這個代碼在運行時將得到的權限。
2:class文件效驗器
class文件結構的檢查
類型數據的語義檢查
字節碼驗證
符號引用的檢查
二進制兼容
3:內置於JAVA虛擬機(及語言)的安全特性
類型安全的引用轉換
結構化的內存訪問(無指針算法)
自動垃圾收集(不必顯示的釋放被分配的內存)
數組邊界檢查
空引用檢查
4:安全管理器及API
雖然安全管理器是JAVA安全模型最大的優點之一,但是也有一個潛在的弱點。編寫一個安全管理器是一項負責的任務,並可能導致出錯。在實現安全管理器的check方法
時,任何錯誤都將變成運行時的安全漏洞。
5:代碼簽名和認證
三:什么是字節碼
字節碼代碼了java的方法,它是由稱為操作碼的單字節指令組成的序列,每一個操作碼后面多跟着一個或者多個操作數。
