金嬋鳴 徐東平
摘要:介紹了Java平臺安全、J2EE安全體系結(jié)構(gòu)。以一個登錄請求為例,重點研究了J2EE架構(gòu)在醫(yī)師協(xié)會管理系統(tǒng)中的應(yīng)用,以及使用J2EE安全體系結(jié)構(gòu)構(gòu)建醫(yī)師協(xié)會管理系統(tǒng)。
關(guān)鍵詞:J2EE;安全體系結(jié)構(gòu);醫(yī)師協(xié)會管理系統(tǒng)
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)18-2pppp-0c
Security Research on Medical Doctors Association MIS based on J2EE
JIN Chan-ming
(Wuhan University of Technology,College Of Computer Science and Technology,Wuhan 430063,China)
Abstract:In this paper,we research on Java platform security and J2EE security system architecture.Take the request of login for instance,focus on how J2EE works in a college of doctors management system,and how to use J2EE security system architecture to build it.
Key words:J2EE; security system architecture; a college of doctors management system
1 引言
隨著社會主義市場經(jīng)濟的發(fā)展,醫(yī)療服務(wù)的規(guī)范化管理日益受到關(guān)注,相關(guān)的人事制度改革研究也日漸興盛。為了更好的實現(xiàn)醫(yī)療服務(wù)規(guī)范化管理,嚴(yán)格規(guī)范全國各地醫(yī)師執(zhí)業(yè)資格,更好地協(xié)調(diào)醫(yī)師之間的交流合作,建立一套針對全國醫(yī)師協(xié)會的管理系統(tǒng)是勢在必行,近年來互聯(lián)網(wǎng)絡(luò)的發(fā)展和Internet技術(shù)的普及,擁有眾多優(yōu)勢的B/S結(jié)構(gòu)在Web應(yīng)用程序開發(fā)中得到迅速的推廣。但是綜合運用JSP、Java、互聯(lián)網(wǎng)絡(luò)和數(shù)據(jù)庫等多種技術(shù)開發(fā)的醫(yī)師協(xié)會管理系統(tǒng),會存在不少安全性隱患。比如,由于互聯(lián)網(wǎng)絡(luò)的開放性、通信協(xié)議的安全缺陷、處理分布性等,在網(wǎng)絡(luò)環(huán)境中存儲、訪問和傳輸數(shù)據(jù)信息,很有可能被泄露或破壞,所以加強網(wǎng)絡(luò)安全非常迫切。
2 醫(yī)師協(xié)會管理系統(tǒng)概述
綜合分析醫(yī)師協(xié)會管理系統(tǒng)的需求說明,得到系統(tǒng)功能模塊圖和頂層數(shù)據(jù)流圖。
圖1系統(tǒng)主要功能模塊
圖2 頂層數(shù)據(jù)流圖
系統(tǒng)用戶分為管理員用戶和普通用戶,不同的用戶類型使用權(quán)限不同。對于用戶管理模塊,管理員有增加、修改、刪除普通用戶信息的權(quán)限,而普通用戶就只有修改用戶信息的權(quán)限。對于其他功能模塊,管理員可以進行增加、刪除、修改操作,普通用戶只能瀏覽。
3 系統(tǒng)的安全性考慮
3.1 物理安全性
保證安裝了醫(yī)師協(xié)會管理系統(tǒng)的計算機設(shè)備的物理安全是前提。物理安全是指保護計算機設(shè)備免遭雷擊、火災(zāi)等環(huán)境事故以及因人為操作失誤導(dǎo)致的破壞過程。主要通過安裝消防、避雷系統(tǒng),設(shè)備冗余備份,嚴(yán)格管理及提高員工的整體安全意識等措施予以保障。
3.2 Java平臺的安全性
J2EE安全體系結(jié)構(gòu)建立在J2SE的基本特征之上,而J2SE又是以Java平臺為基礎(chǔ),在研究基于J2EE架構(gòu)的醫(yī)師協(xié)會管理系統(tǒng)之前,有必要了解Java平臺安全機制和J2EE的安全體系結(jié)構(gòu)。
Java語言是一種與操作系統(tǒng)平臺無關(guān)的語言,本身有著較為完善的安全機制,用Java開發(fā)應(yīng)用程序,可以安全的在Internet上運行。最初的Java平臺(JDK1.1)采用沙箱(sandbox)安全模型,核心主要由3個支柱承擔(dān),分別是Java運行環(huán)境的3個重要安全組件:類加載器、類文件驗證器和安全管理器[1]。
圖3 Java2安全模型
3.3 用戶身份劃分
J2EE中的安全是基于角色的,也就是說資源訪問權(quán)限賦予角色,通過角色把權(quán)限賦予用戶。要檢查用戶是否有訪問權(quán)限,服務(wù)器就檢查用戶所屬的角色以及角色所具有的權(quán)限,服務(wù)器用特定的工具實現(xiàn)用戶和角色之間的映射。不同的J2EE服務(wù)器供應(yīng)商用自己特定的方法告訴服務(wù)器哪個用戶屬于哪個角色,有的使用操作系統(tǒng)的安全機制,有的把用戶和角色信息保存在數(shù)據(jù)庫或者文件系統(tǒng)中[2]。通過聲明性安全和編程性安全這兩種方式可以指出特定角色可以訪問的特定資源。
3.3.1 聲明性的安全
聲明性的安全通過安全聲明的方式來表示應(yīng)用程序的安全需求,一般包括安全角色、訪問控制和驗證要求等。在J2EE平臺中的部署描述符充當(dāng)了聲明性安全的主要工具。部署描述符是組件開發(fā)者、應(yīng)用程序部署者和應(yīng)用程序組裝者之間的交流工具。應(yīng)用程序的開發(fā)者用它來表示應(yīng)用中的安全需求,應(yīng)用程序部署者或應(yīng)用程序組裝者將安全角色與部署環(huán)境中的用戶和組件映射起來,在程序運行時容器從部署描述符中提取出相應(yīng)的安全策略,然后容器根據(jù)安全策略執(zhí)行安全驗證。聲明性的安全不需要開發(fā)人員編寫任何相關(guān)的代碼,一切都是通過配置部署描述符來完成的。
3.3.2 可編程的安全
有時候一些聲明性安全無法滿足特殊安全的要求。假定開發(fā)人員定義了兩個角色User和Admin,要求User角色的用戶只能訪問他自己的賬戶信息,而Admin角色的用戶能查看所有賬戶的信息。這時候利用聲明性安全就無能為力了,因為聲明性安全通過部署描述符定義的安全需求是基于類,而不是基于實例的。所以這個問題應(yīng)該利用J2EE的可編程性安全來解決。
根據(jù)實際需要,整個系統(tǒng)面向的用戶可分為3類角色:系統(tǒng)管理員、注冊用戶和游客。每種角色的活動分別沿一條路線前進,對于每一種角色都有相應(yīng)的機制,控制它只能在允許的活動范圍內(nèi)行使自己的權(quán)力,這樣就為各種角色構(gòu)成了自己的活動空間,并且各種角色的活動空間互不干擾,使用這種方法系統(tǒng)的安全性得到了很大程度的加強。在具體的實現(xiàn)上,在數(shù)據(jù)庫中為每種角色都增加了一個表,如administrator表 (系統(tǒng)管理員),user表(注冊用戶),tourist表(游客用戶)。驗證用戶身份時,使用從用戶的證書中獲取的信息(用戶的證書編號)來驗證該信息是否是表中記錄的子集,如果是,則說明該用戶是該表所表征的角色,可以進行角色允許的操作;否則,將提示為非法用戶。為了將角色的活動范圍控制在合法的區(qū)域內(nèi),只對用戶有權(quán)力訪問的頁面建立鏈接,對高安全級的鏈接增加身份驗證[3]。
3.4 系統(tǒng)登錄的安全性考慮
醫(yī)師協(xié)會管理系統(tǒng)的登錄過程如下:
(1)客戶從瀏覽器客戶端向Web服務(wù)器發(fā)出請求,服務(wù)器將請求轉(zhuǎn)發(fā)到Web容器,根據(jù)請求路徑URL找到ActionServlet,Web容器調(diào)用Servlet的service()方法,根據(jù)請求參數(shù)的不同調(diào)用doGet()或者doPost()方法。
(2)ActionServlet的doGet()或者doPost()方法調(diào)用process()方法處理請求和響應(yīng),生成RequestProcess對象處理配置文件struts-config.xml中的配置信息,依次調(diào)用processMapping()查找處理此次請求的Action信息并返回ActionMapping對象;processActionForm()創(chuàng)建此次請求的ActionForm對象;processActionCreate()創(chuàng)建處理此次請求的Action實例(LoginAction對象);processActionPerform()執(zhí)行Action實例的execute()方法。
(3)通過調(diào)用execute()方法獲取LoginForm存儲的用戶和密碼等數(shù)據(jù)信息,其中將ActionForm Bean、ActionMapping、request、response對象傳遞給LoginAction對象(Action實例);執(zhí)行完必要的邏輯處理比如查詢數(shù)據(jù)庫后,返回一個ActionForward對象,由該對象調(diào)用RequestProcess對象中的processForwardConfig()方法解析配置文件中跳轉(zhuǎn)參數(shù),轉(zhuǎn)發(fā)到相應(yīng)的View頁面success.jsp或者failure.jsp。
醫(yī)師協(xié)會管理系統(tǒng)的登錄方式是用表單登錄,用戶在表單輸入用戶名及口令以后,提交給服務(wù)器,由服務(wù)器來查詢數(shù)據(jù)庫實現(xiàn)對客戶端的認(rèn)證及授權(quán)。但是這并不安全,其主要的漏洞分為一下幾種:
用戶的敏感信息在不安全的信道中以明文的形式存在,有時連用戶名和密碼都沒有進行至少的編碼,這種方式簡單,但只能提供低級的安全。
沒有對服務(wù)器進行驗證,攻擊者冒充服務(wù)器,從而要求用戶把登錄信息發(fā)送到攻擊者的主機上,這樣用戶的口令就會被攻擊者所截獲。
用戶的輸入格式非法。在登錄時,把用戶的登錄名和口令作為數(shù)據(jù)庫查詢的參數(shù),這樣用戶可以輸入特殊的以及口令來使查詢語句失去原來的作用。
所以要采用安全登錄的方式,安全登錄的過程如下:
服務(wù)器下載Applet類文件到客戶端,并產(chǎn)生一個隨機數(shù)k,送予客戶端,服務(wù)器與客戶端進行密匙交換,獲得會話密匙??蛻舳说纳矸蒡炞C模塊驗證服務(wù)器身份,客戶端的摘要算法模塊將用戶登錄口令進行摘要計算??蛻舳思用苣K把用戶名、隨機數(shù)K+1以及計算所得到的摘要值用會話密匙加密,傳送給服務(wù)器。服務(wù)器脫密模塊用會話密匙脫密,獲得用戶名、摘要值及隨機數(shù)K+1,驗證隨機數(shù)是否正確并把摘要值與數(shù)據(jù)庫中的摘要值進行匹配,如果服務(wù)器匹配成功,JSP顯示成功登錄,否則顯示失敗[1][4]。
3.5 信息發(fā)布安全設(shè)計
醫(yī)師協(xié)會信息管理系統(tǒng)內(nèi)部涉及大量的業(yè)務(wù)信息發(fā)布,主要是發(fā)布一些文件、公告信息。這就需要解決哪些人有權(quán)限發(fā)布信息的問題,既解決身份認(rèn)證和訪問控制的安全問題??梢圆捎秒娮诱?wù)內(nèi)網(wǎng)統(tǒng)一的身份認(rèn)證來訪問控制平臺,并使用基于PKI/CA體系的數(shù)字證書認(rèn)證方式和基于角色的集中權(quán)限管理方式實現(xiàn)。
4 結(jié)束語
J2EE平臺在構(gòu)架安全信息管理系統(tǒng)有著獨特的優(yōu)勢,其安全體系結(jié)構(gòu)亦非常復(fù)雜。文中僅從整體上介紹了構(gòu)建J2EE的安全構(gòu)架并針對目前Web開發(fā)的弊端,整合了Struts、Hibernate等優(yōu)秀的開源框架,采用MVC設(shè)計模式,構(gòu)建了一個安全的醫(yī)師協(xié)會管理系統(tǒng)。
參考文獻(xiàn):
[1] 徐迎曉.Java安全性編程實例[M].北京:清華大學(xué)出版社,2003.
[2] 孫衛(wèi)琴.精通Struts:基于MVC的Java Web設(shè)計與開發(fā)[M].北京:電子工業(yè)出版社,2004.
[3] 郝玉龍,等.J2EE編程技術(shù)[M].清華大學(xué)出版社,2005.
[4] 倪曉秋,等.J2EE案例開發(fā)[M].中國水利水電出版社,2005.
收稿日期:2008-03-12
作者簡介:金嬋鳴(1984-),女,湖北武漢人,武漢理工大學(xué)計算機科學(xué)與技術(shù)學(xué)院在讀碩士,研究方向:多媒體技術(shù)、網(wǎng)絡(luò)應(yīng)用。