東曉巖
摘要:在日益強(qiáng)調(diào)信息安全的今天,Java技術(shù)的應(yīng)用十分廣泛,采用Java開發(fā)平臺(tái)的廠商很多,基于Java程序設(shè)計(jì)語言的開發(fā)工具也很多,在這個(gè)背景下,Java開發(fā)平臺(tái)的安全性受到越來越多的關(guān)注與討論。該文首先就Java開發(fā)平臺(tái)的整體情況進(jìn)行概述,以此來引入Java開發(fā)平臺(tái)安全性的研究,從體系結(jié)構(gòu)、程序語言以及API功能三個(gè)方面闡述Java開發(fā)平臺(tái)的安全性,以供參考。
關(guān)鍵詞:Java開發(fā)平臺(tái);安全性;體系;程序語言;API功能
中圖分類:TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)21-0024-02
隨著科學(xué)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)硬件技術(shù)逐步走向瓶頸,軟件開發(fā)成為電子信息技術(shù)產(chǎn)業(yè)的重點(diǎn)發(fā)展方向。而信息安全自“斯諾登”事件爆發(fā)后,被各國所重視,為何我國在極力研發(fā)自主微機(jī)芯片以及操作系統(tǒng),主要就在于引進(jìn)的硬件或操作系統(tǒng)可能存在的后門或漏洞會(huì)造成信息的泄露。而Java程序設(shè)計(jì)語言被開發(fā)出來,便以其優(yōu)秀的特質(zhì),流行于國際,并伴隨著Internet的發(fā)展,被廣泛應(yīng)用于各個(gè)領(lǐng)域,在強(qiáng)調(diào)信息安全的今天,Java開發(fā)平臺(tái)的安全性受到了巨大的挑戰(zhàn),因此對(duì)其進(jìn)行深入的研究具有十分重要的意義。
1 Java開發(fā)平臺(tái)概述
2 Java開發(fā)平臺(tái)安全性研究
2.1 體系結(jié)構(gòu)
Java的體系結(jié)構(gòu)在Java虛擬機(jī)中運(yùn)行,在此環(huán)境中進(jìn)行創(chuàng)建跨平臺(tái)應(yīng)用程序。主要工作的原理分為兩個(gè)部分,編碼以及運(yùn)行。在編譯時(shí),將Java源代碼文件(.java)經(jīng)由編譯器(javac)編譯成二進(jìn)制字節(jié)碼文件(.class),運(yùn)行時(shí)通過類加載器加載class文件,包括編譯出來的二進(jìn)制字節(jié)碼文件以及原始的API class文件,并進(jìn)行連接和初始化,由字節(jié)碼校驗(yàn)器校驗(yàn)后交由執(zhí)行引擎運(yùn)行。執(zhí)行引擎包括解釋器以及JIT代碼生成器,解釋器將指令解釋成適用于本地操作系統(tǒng)的方法并執(zhí)行,JIT代碼生成器的功能與解釋器功能類似。程序在執(zhí)行中,保證安全的代碼指令被同時(shí)解釋為本地操作系統(tǒng)適用的方法并執(zhí)行,從而控制外部資源的訪問。因此,Java的體系結(jié)構(gòu)為其安全性提供了支持,這主要與Java程序的執(zhí)行方式有關(guān),從上文來看,不同平臺(tái)相同的應(yīng)用程序代碼,要先經(jīng)過編譯,使這些代碼成為符合Java規(guī)范的二進(jìn)制字節(jié)碼,然后再進(jìn)行解釋執(zhí)行。重點(diǎn)就在于這種解釋執(zhí)行的模式為Java程序的安全性提供了有力的支持。從Java的平臺(tái)無關(guān)性可以看出,Java應(yīng)用程序如果使用標(biāo)準(zhǔn)為百分之百的API功能,且不直接調(diào)用本地操作系統(tǒng)的方法,則可以不用修改直接應(yīng)用與多種平臺(tái),這為程序在嵌入式或者異構(gòu)網(wǎng)絡(luò)環(huán)境方面的應(yīng)用提供了方便,Java開發(fā)平臺(tái)的網(wǎng)絡(luò)移動(dòng)性,催生出一種新的軟件模式,可以通過網(wǎng)絡(luò)將軟件和數(shù)據(jù)傳送到客戶端,并以必需的軟件瀏覽和操縱數(shù)據(jù)。這無疑能夠?yàn)榘踩蕴峁└玫闹С帧?/p>
2.2 Java程序語言
Sun Micro system公司在開發(fā)Java時(shí),將安全性進(jìn)行了充分的考慮,這是Java廣受歡迎的重要因素。在程序語言層次上主要有以下幾個(gè)方面的內(nèi)容,體現(xiàn)Java開發(fā)平臺(tái)的安全性。
第一,語言規(guī)范和編譯器。通過語言規(guī)范和編譯器可以很好地保證源代碼的安全性,在Java程序語言的設(shè)計(jì)時(shí)就將C、C++中可能出現(xiàn)的不安全操作進(jìn)行了總結(jié)并且予以限制。而且程序語言不允許直接訪問內(nèi)存,采用引用分配對(duì)象的方式而不是指針,無法通過數(shù)學(xué)操作更改指針,Java程序語言中具備真正的數(shù)組,并以嚴(yán)格的邊界檢查進(jìn)行數(shù)組的訪問。在對(duì)Java源代碼文件進(jìn)行編譯時(shí),所有類型的轉(zhuǎn)換都需要進(jìn)行合法性檢查,但這些檢查只能保證檢測出不符合語言規(guī)范的惡意攻擊,有著一定的局限性,字節(jié)碼校驗(yàn)很好地解決了這個(gè)局限。符合程序語言規(guī)范的編譯器能保證源代碼的合法性,但惡意的攻擊則可能將編譯器進(jìn)行更改,從而產(chǎn)生不符合安全規(guī)范的字節(jié)碼。而字節(jié)碼校驗(yàn)存在的目的就是檢查這些被篡改的編譯器編譯的代碼,確保字節(jié)碼的格式正確合法。從而保證在解釋器解釋為本地系統(tǒng)方法并執(zhí)行時(shí),不出現(xiàn)偽造指針、棧溢出且違反訪問限制,保證訪問對(duì)象的正確性以及執(zhí)行方法使用正確的類型、數(shù)量的參數(shù)調(diào)用。
第二,在Java虛擬機(jī)中,類加載器會(huì)加載class文件以及加載原始API class文件,同時(shí)負(fù)責(zé)將應(yīng)用程序需要的類進(jìn)行鏈接和初始化。在加載字節(jié)碼時(shí)會(huì)對(duì)其進(jìn)行字節(jié)碼驗(yàn)證,確保這些裝入的字節(jié)碼沒有偽造指針,沒有違反訪問限制以及訪問對(duì)象正確。這個(gè)過程對(duì)應(yīng)用程序的執(zhí)行代碼安全性上關(guān)系重大。由于類加載器的重要性,因此Java的程序語言中有一些措施在對(duì)其進(jìn)行防護(hù),主要有兩個(gè)方面的內(nèi)容,一方面想要在Java虛擬機(jī)中創(chuàng)建一個(gè)新類或安裝一個(gè)新的加載器,需要具備特殊的權(quán)限。另一方面,所有新安裝的類加載器需要授權(quán)給父加載器,以此確保以前加載的類不會(huì)被惡意代碼篡改,尤其是Java API類。這是Java安全機(jī)制的核心類。
第三,在Java虛擬機(jī)中還有一個(gè)“沙箱”——安全管理器。這個(gè)沙箱起到的作用就是將本地資源與Java虛擬機(jī)中資源進(jìn)行隔離,防止虛擬機(jī)中惡意代碼破壞本地操作系統(tǒng)或應(yīng)用程序。這個(gè)沙箱體系是Java開發(fā)平臺(tái)最大的優(yōu)勢和特點(diǎn)之一,其安全策略為不同的代碼單元制定出細(xì)致的訪問控制權(quán)限,并且授予給代碼。
第四,在新版本Java開發(fā)工具中,訪問控制器替換了安全管理器,執(zhí)掌Java的安全策略,比安全管理器更加靈活,安全策略更加豐富多樣,主要有三種表現(xiàn)形式,其一,在當(dāng)前有小的安全策略條件下,有權(quán)決定是否訪問系統(tǒng)關(guān)鍵資源。其二,將代碼進(jìn)行標(biāo)記,使其特權(quán)化,并對(duì)后續(xù)的訪問產(chǎn)生影響。其三,以快照的形式獲得當(dāng)前調(diào)用的上下文,并進(jìn)行保存,從而為不同的上下文制定出不同的訪問權(quán)限。
2.3 Java的API功能
Java的API功能包括認(rèn)證、JAAS(授權(quán)服務(wù))、JSSE(Java安全套接字?jǐn)U展)以及JCE(Java加密擴(kuò)展)等。Java開發(fā)平臺(tái)在內(nèi)置安全策略的基礎(chǔ)上通過API功能為開發(fā)人員提供總體性的安全解決方案。
第一,認(rèn)證與授權(quán)。Java開發(fā)平臺(tái)的API功能提供的身份認(rèn)證組件,能夠準(zhǔn)確地識(shí)別當(dāng)前執(zhí)行各種類型代碼的用戶,包括應(yīng)用程序、applet以及bean。JAAS為現(xiàn)有的安全策略進(jìn)行了有效的補(bǔ)充,為敏感任務(wù)的指令代碼的執(zhí)行制定一些方法進(jìn)行限制,用戶與任務(wù)起源對(duì)此具有決定性的影響。Java開發(fā)平臺(tái)允許JAAS進(jìn)行嵌入式執(zhí)行方案,這使得JAAS與Java內(nèi)置安全策略的底層認(rèn)證與授權(quán)獨(dú)立開來,從而在不修改程序本身的基礎(chǔ)上,為新的認(rèn)證與授權(quán)技術(shù)提供有效的途徑。
3 結(jié)語
Java開發(fā)平臺(tái)的程序語言相比C、C++等獨(dú)具特色包括安全性、跨平臺(tái)性、程序強(qiáng)壯性等等,優(yōu)勢是巨大的,這也是Java開發(fā)平臺(tái)流行于世的主要因素。目前,利用Java開發(fā)平臺(tái)進(jìn)行程序開發(fā),在各個(gè)領(lǐng)域被應(yīng)用,這時(shí)研究Java開發(fā)平臺(tái)的安全性意義重大。Java的體系結(jié)構(gòu)為其安全性提供了極其有力的支持,再通過內(nèi)置的底層安全策略(編譯器、字節(jié)碼校驗(yàn)、類加載器)以及外置擴(kuò)展包(JCE、JSSE、JAAS)為開發(fā)者提供更加豐富的安全方案。因此深入研究Java開發(fā)平臺(tái)的安全性,并采用適當(dāng)?shù)姆椒ㄟM(jìn)行使用,能夠?qū)ο到y(tǒng)及信息的安全性提供十分巨大的幫助,將代價(jià)與風(fēng)險(xiǎn)降低。但是電子信息技術(shù)的不斷發(fā)展,給Java開發(fā)平臺(tái)的安全性提出全新的要求,以保證信息的安全,防止類似“斯諾登”事件的情況再次發(fā)生,這就要求Java開發(fā)平臺(tái)的安全框架進(jìn)行不斷的完善與發(fā)展。
參考文獻(xiàn):
[1] 王海,于佳.Java開發(fā)工具分析與研究[J].吉林化工學(xué)院學(xué)報(bào),2016(3):67-70.
[2] 文其瑞.基于Java EE應(yīng)用程序的Web服務(wù)安全性分析[J].電子制作,2013(16):152.
[3] 趙爭東.基于Java的數(shù)據(jù)庫應(yīng)用框架的研究設(shè)計(jì)和探索[J].信息系統(tǒng)工程,2015(7):79+81.