前言
保持了每天一篇的更新速度,每天的內容都不是很多,因爲打字比較累哈,總結的都是小瘋子自己看完書體會分享給大家的,所以,如果覺得對於Java虛擬機你想有更深入的瞭解,可以點開小瘋子的頭條,你會發現誠意滿滿!
正文
Java虛擬機的安全特性
當Java虛擬機裝載了一個類以後,經過對它的三次class文件檢驗以後,就可以被運行了。除了對符號引用的檢驗,其實Java虛擬機在執行字節碼時還進行一些內置的安全機制的操作。
Java虛擬機的的特性:
-
類型安全的引用轉換。
-
結構化的內存訪問。
-
自動垃圾收集。
-
數組邊界檢查。
-
空引用檢查。
爲了使Java程序更爲健壯,也使得它們的運行更爲安全,需要保證Java程序只能使用類型安全的,結構化的方法去訪問內存。如果一個程序破壞內存,崩潰,或者影響其他程序崩潰,那麼,它就是一個潛在的危險程序,通過強制對內存的結構化訪問,Java虛擬機可以產生健壯的程序,而且還可以阻撓那些黑客,使他們不能爲了達到某些目的而破壞虛擬機的內在存儲。
內置在就Java虛擬機中的另一個安全特性——作爲內存的機構化訪問的一個後備——就是並未指明運行時數據空間在Java虛擬機內部是怎麼分佈的。運行時數據空間是指一些呃逆村空間,Java虛擬機用這些空間來存儲運行一個Java程序時所需要的數據,Java棧,存儲字節碼的方法區,以及一個垃圾回收堆。如果查看一個class文件的內部,將找不到任何內存地址。當虛擬機裝載一個class文件時,由它將這些字節碼以及其他從class文件中解析得到得數據放置在內存的什麼地方,當虛擬機啓動一個線程時,由它決定爲這個線程創建Java棧放在哪裏,當創建一個對象時,也是有它決定放在內存哪個地方,這樣,一個黑客就可能憑藉class文件中的內容來推測出內存中的哪些數據分別代表什麼。
但是,對於支持Java虛擬機的類型的類型安全機制所建立的安全屏障,還是有辦法可以突破的,雖然字節碼指令沒有向用戶提供不安全的,非結構化的內存訪問方法,但是還是可以繞過字節碼,調用本地方法,當調用本地方法的時候,Java安全箱完全不起作用,所以當調用一個本地方法試圖做一些具有破壞性的動作時,安全管理器並沒有檢查。
因此,在安全管理器中包含了一個方法,該方法用來確定一個程序是否能夠裝載動態鏈接庫,因爲在調用本地方法時動態鏈接庫是必須的,不可靠的applet就不能裝載新的動態鏈接庫,因此他們就不能安裝自己的新的本地方法,但是他們可以調用Java API的方法,這些方法可能是本地的,但是都是可信的。
最後一個異常的結構化錯誤處理,因爲Java虛擬機支持異常,所以當一些違反安全的行爲發生時,它會做一些結構化處理,因爲虛擬機支持異常,所以當一些違反安全的行爲發生時,它會做一些結構化處理,Java虛擬機將拋出一個異常或者一個錯誤。
到此就介紹結束了,預告一下,下一節,安全管理器!沒有聽過沒有關係,不關注就太可惜了~