Java虛擬機的內置安全特性,看完務必書藏起來,很重要!

前言

保持了每天一篇的更新速度,每天的內容都不是很多,因爲打字比較累哈,總結的都是小瘋子自己看完書體會分享給大家的,所以,如果覺得對於Java虛擬機你想有更深入的瞭解,可以點開小瘋子的頭條,你會發現誠意滿滿!

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虛擬機將拋出一個異常或者一個錯誤。

到此就介紹結束了,預告一下,下一節,安全管理器!沒有聽過沒有關係,不關注就太可惜了~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章