java虛擬機(jī)內(nèi)置的安全特性
- 作者:新網(wǎng)
- 來(lái)源:新網(wǎng)
- 瀏覽:100
- 2018-05-07 11:27:10
java虛擬機(jī)在執(zhí)行字節(jié)碼時(shí)還進(jìn)行其他一些內(nèi)置的安全機(jī)制的操作。包括:1.類型安全的引用轉(zhuǎn)換。2.結(jié)構(gòu)化的內(nèi)存訪問(wèn)(無(wú)指針?biāo)惴?。3.自動(dòng)化垃圾收集(不必顯式地釋放被分配的內(nèi)存)。4.數(shù)組邊界檢查。5.空引用檢查。
<
div>
java虛擬機(jī)在執(zhí)行字節(jié)碼時(shí)還進(jìn)行其他一些內(nèi)置的安全機(jī)制的操作。包括:1.類型安全的引用轉(zhuǎn)換。2.結(jié)構(gòu)化的內(nèi)存訪問(wèn)(無(wú)指針?biāo)惴?。3.自動(dòng)化垃圾收集(不必顯式地釋放被分配的內(nèi)存)。4.數(shù)組邊界檢查。5.空引用檢查。
java程序只能使用類型安全,結(jié)構(gòu)化的方法去訪問(wèn)內(nèi)存
這樣可以避免黑客知道一個(gè)類裝載器在內(nèi)存中的位置,賦予一個(gè)指針指向那塊內(nèi)存,從而對(duì)類裝載器的數(shù)據(jù)進(jìn)行操作,而達(dá)到破壞安全系統(tǒng)的目的。
未指明運(yùn)行時(shí)數(shù)據(jù)
空間在java虛擬機(jī)內(nèi)部是怎樣分布的
運(yùn)行時(shí)數(shù)據(jù)空間是指一些java虛擬機(jī)用來(lái)存儲(chǔ)一個(gè)運(yùn)行時(shí)java程序所需的內(nèi)存空間。包括:java棧(每個(gè)線程一個(gè)),一個(gè)存儲(chǔ)字節(jié)碼的方法區(qū),以及一個(gè)垃圾收集堆(用來(lái)存儲(chǔ)由運(yùn)行的程序創(chuàng)建的對(duì)象)。java虛擬機(jī)規(guī)范并未決定使用什么數(shù)據(jù)結(jié)構(gòu)來(lái)表示運(yùn)行時(shí)的數(shù)據(jù)空間,并且存放在內(nèi)存中的哪個(gè)位置。這樣,黑客就不能夠憑借class文件中的內(nèi)容,知道內(nèi)存中數(shù)據(jù)的內(nèi)存布局。這樣,即使能夠突破java虛擬機(jī)的內(nèi)存訪問(wèn)限制,也會(huì)無(wú)法找到他們想找到的內(nèi)容。但是可以使用本地方法來(lái)達(dá)到破壞內(nèi)存的目的。
異常的結(jié)構(gòu)化錯(cuò)誤處理
當(dāng)一個(gè)違反安全的行為發(fā)生時(shí),java虛擬機(jī)會(huì)做一些異常的結(jié)構(gòu)化處理,java虛擬機(jī)將拋出一個(gè)異常或者錯(cuò)誤,而不是崩潰。這個(gè)異常或者錯(cuò)誤將導(dǎo)致這個(gè)線程死亡,而不是整個(gè)系統(tǒng)陷入癱瘓。異常機(jī)制使程序能夠?qū)⒖刂茝陌l(fā)生異常的地方轉(zhuǎn)到處理這個(gè)異常的情況。
安全管理器和java api
java安全模型的前三個(gè)組成部分-類裝載器體系結(jié)構(gòu),class文件檢驗(yàn)器和java內(nèi)置的安全特性一起達(dá)到一個(gè)共同的目的:
保持java虛擬機(jī)實(shí)例和它正在運(yùn)行的應(yīng)用程序的內(nèi)部完整性,使得它們不受惡意或者有漏洞的代碼侵犯。
java安全模型的第四部分:安全管理器:主要用于保護(hù)虛擬機(jī)的外部資源不被虛擬機(jī)內(nèi)運(yùn)行的文件或者有漏洞的代碼侵犯。
安全管理器是一個(gè)單獨(dú)的對(duì)象,在運(yùn)行的java虛擬機(jī)中,它在訪問(wèn)控制--對(duì)于外部資源的訪問(wèn)控制--中起中樞作用。
安全管理器負(fù)責(zé)兩個(gè)方面的工作:
1)說(shuō)明一個(gè)安全策略
2)執(zhí)行這個(gè)安全策略
java安全模型的不足
無(wú)法阻止惡意移動(dòng)代碼不斷分配內(nèi)存直到內(nèi)存耗盡
無(wú)法阻止惡意代碼不斷生成線程
其實(shí)不僅是惡意代碼,我們自己寫(xiě)代碼的時(shí)候也要避免不斷分配內(nèi)存和不斷生成線程的現(xiàn)象的產(chǎn)生。