陳 波,劉 星,蘭全祥
(攀枝花學(xué)院,四川 攀枝花 617000)
隨著信息時代的飛速發(fā)展,政協(xié)提案方式從傳統(tǒng)的文檔形式轉(zhuǎn)換到現(xiàn)有的基于網(wǎng)絡(luò)的政協(xié)提案系統(tǒng)。傳統(tǒng)的方式在人力物力上開銷很大,并且文檔的收集和提交受到區(qū)域和時間的限制,不能及時處理和流轉(zhuǎn)提案信息。但基于網(wǎng)絡(luò)的政協(xié)提案系統(tǒng)能很好地解決這些弊端,大大提升政協(xié)提案的處理周期,被大多數(shù)政府部門所運用。另外,政協(xié)提案系統(tǒng)中可能存在涉及國家機密的文件,因此系統(tǒng)在安全性上要求非常高。目前,一般的信息系統(tǒng)在安全性方面存在諸多的漏洞和問題,這些漏洞常被黑客利用并竊取系統(tǒng)信息。為了滿足政協(xié)提案系統(tǒng)對安全性的高要求,本文提出了基于Shiro框架的政協(xié)提案系統(tǒng),并針對系統(tǒng)的安全性問題進行研究與設(shè)計。
政協(xié)提案系統(tǒng)對于安全性的要求高于其他一般系統(tǒng)。在系統(tǒng)安全需求設(shè)計中,不僅需要有登錄認證、請求攔截、權(quán)限細化、防SQL注入以及防暴力破解等功能,而且需要滿足系統(tǒng)的保密性、完整性、可用性和抗毀性[1]。
政協(xié)提案系統(tǒng)首先應(yīng)具備用戶登錄認證、授權(quán)以及賬戶異常處理等功能。由于政協(xié)提案系統(tǒng)為非公共信息處理系統(tǒng),因此需要進行用戶登錄認證,只有使用正確口令進行認證后才能進行系統(tǒng)操作。游客只能瀏覽首頁面的公告信息。
用戶在登錄政協(xié)提案系統(tǒng)時,除了輸入密碼錯誤或用戶名錯誤導(dǎo)致登錄認證失敗外,賬號可能處于異常狀態(tài),如賬戶未激活、由于人員離職引起的賬戶注銷或休眠等情況。其次,異地登錄、多次認證失敗將引起系統(tǒng)安全機制對賬戶的主動凍結(jié)和休眠。對于賬號正常認證成功的用戶,通過Shiro安全框架確定用戶的角色并授權(quán)。政協(xié)提案系統(tǒng)的登錄認證用例圖如圖1所示。
圖1 政協(xié)提案系統(tǒng)的登錄認證用例圖
政協(xié)提案系統(tǒng)應(yīng)具備請求攔截功能,攔截用戶的非法訪問和未授權(quán)請求。對于公共訪問頁面的信息,訪問者不需要授權(quán)就可以直接進行訪問瀏覽。但對于提案系統(tǒng)內(nèi)部信息則需要授權(quán)認證之后才能訪問。系統(tǒng)應(yīng)具備URL直接訪問攔截、登錄超時下的授權(quán)銷毀等功能。政協(xié)提案系統(tǒng)請求攔截流程圖如圖2所示。
圖2 政協(xié)提案系統(tǒng)請求攔截流程圖
政協(xié)提案系統(tǒng)應(yīng)具備權(quán)限細化功能,可以為不同的用戶進行不同的權(quán)限設(shè)定。該系統(tǒng)將包含多個模塊,如個人信息模塊、公告信息模塊、提案模塊、提案審核模塊以及提案處理模塊等。不同職務(wù)的人員應(yīng)具備不同的權(quán)限,這就要求系統(tǒng)應(yīng)具備權(quán)限細化功能,能夠靈活、可變的處理所有用戶的權(quán)限。
除上述安全需求外,政協(xié)提案系統(tǒng)還應(yīng)具備一般信息系統(tǒng)預(yù)防黑客攻擊和非法入侵的功能。
(1)防止SQL注入式攻擊。SQL注入式攻擊是普遍存在于信息系統(tǒng)中的攻擊方式。該攻擊通過欺騙服務(wù)器執(zhí)行惡意的SQL命令,使得數(shù)據(jù)庫暴露或非法認證登錄成功。
(2)防止暴力破解。暴力破解是一種基于窮舉法的密碼破譯方法,IBM為美國軍方制造的“颶風(fēng)”超級計算機就是為了提高密碼的破譯效率而專門其制造的。因此防止暴力破解是信息系統(tǒng)必不可少的安全防護手段。
(3)MD5混合加密機制。Message Digest Algorithm MD5(消息摘要算法第五版)是計算機安全領(lǐng)域廣泛使用的一種散列函數(shù),用以提供消息的完整性保護和密碼加密。雖然MD5是一種不可逆算法,但隨著信息技術(shù)的不斷發(fā)展,MD5庫已經(jīng)得到了極大的完善,簡單的MD5加密已經(jīng)不再安全。
(4)防止網(wǎng)絡(luò)監(jiān)聽。網(wǎng)絡(luò)監(jiān)聽是黑客最常使用、最有效的網(wǎng)絡(luò)攻擊方法之一。通過監(jiān)視網(wǎng)絡(luò)狀態(tài)、截獲網(wǎng)絡(luò)傳輸信息可以有效地截獲用戶登錄認證的關(guān)鍵數(shù)據(jù)。也就是說,當(dāng)黑客偽造登錄頁面并將截獲的信息發(fā)送至主機將輕易的獲得授權(quán)。
通過對政協(xié)提案系統(tǒng)的安全性需求進行分析,為了實現(xiàn)用戶登錄認證、權(quán)限細化、請求攔截以及一些常規(guī)黑客攻擊和非法入侵防護,提出基于Shiro安全框架的政協(xié)提案系統(tǒng),具體安全性功能設(shè)計如下。
Apache Shiro是一個功能強大、靈活性較好的Java開源安全框架,提供了身份認證、訪問授權(quán)、數(shù)據(jù)加密和會話管理等功能,它能夠為任何應(yīng)用提供安全認證及身份控制,支持命令行應(yīng)用、移動應(yīng)用、企業(yè)應(yīng)用和大型網(wǎng)絡(luò)應(yīng)用等不同環(huán)境下的安全保障[2]。
政協(xié)提案系統(tǒng)采用Shiro框架處理用戶登錄認證以及權(quán)限細化問題,能夠很好地滿足安全性需求。其次,Shiro提供了對WEB應(yīng)用的強大支持,并且能很好的與第三方框架進行集成,方便系統(tǒng)開發(fā)[3]。
SQL注入式攻擊一般是通過傳輸特殊字符給服務(wù)器,使得原本的SQL命令發(fā)生改變,從而欺騙服務(wù)器執(zhí)行惡意的SQL命令。因此,針對這一攻擊手段可以采用java.sql中的Prepared Statement接口來預(yù)編譯SQL語句,使SQL命令固化,不因傳輸?shù)膮?shù)而發(fā)生改變。其次,采用正則表達式(又稱規(guī)則表達式Regular Expression)限制用戶輸入特殊字符也能有效的避免SQL命令發(fā)生異常,防止SQL注入式攻擊[4-5]。
政協(xié)提案系統(tǒng)采用預(yù)編譯SQL以及正則表達式處理系統(tǒng)中SQL語句,能很好的預(yù)防SQL注入式攻擊。保證系統(tǒng)數(shù)據(jù)庫中的數(shù)據(jù)不被非法訪問者獲取。
針對暴力破解這種基于窮舉法的密碼破譯方法,驗證碼是非常簡單、有效的方法。通過添加驗證碼,能大大降低黑客的攻擊次數(shù)和頻率[6]。另外,簡單的密碼非常容易被窮舉法破譯,因此為了增加黑客窮舉攻擊代價,在設(shè)置密碼時要求包含大小寫、數(shù)字及特殊字符,并且密碼長度在規(guī)定范圍之內(nèi),保證密碼足夠復(fù)雜,不易被破解。
政協(xié)提案系統(tǒng)采用驗證碼以及復(fù)雜的密碼將能夠很好的防止暴力破解。
MD5混合加密是基于MD5技術(shù),通過設(shè)計特定的公式對數(shù)據(jù)進行加密。這樣的加密方法是為了防止黑客通過查詢MD5密碼庫來獲得明文的有效手段。政協(xié)提案系統(tǒng)采用MD5混合加密能夠有效的滿足系統(tǒng)的保密性。即使數(shù)據(jù)被黑客獲取后,真實數(shù)據(jù)也很難被破譯。
用戶關(guān)鍵數(shù)據(jù)在傳輸過程中很難避免被黑客截獲,這就意味著黑客可以偽裝成用戶向服務(wù)器發(fā)送二次請求,并獲得新的授權(quán)。政協(xié)提案系統(tǒng)可采用由系統(tǒng)產(chǎn)生一個基于系統(tǒng)時間的密文,客戶端和服務(wù)端各持一份。用戶的每次訪問都具有不同的時間令牌,防止黑客進行模擬登陸。其次,將用戶關(guān)鍵數(shù)據(jù)與時間令牌進行加密操作得到一個含有時間令牌的密文數(shù)據(jù),即使監(jiān)聽到關(guān)鍵數(shù)據(jù)也是無效的[7-8]。
政協(xié)提案系統(tǒng)采用時間令牌加密關(guān)鍵數(shù)據(jù),能很好地避免網(wǎng)絡(luò)監(jiān)聽導(dǎo)致的數(shù)據(jù)泄漏和偽裝請求。
通過對政協(xié)提案系統(tǒng)的安全性分析與設(shè)計,該系統(tǒng)采用Shiro安全框架實現(xiàn)用戶登錄認證和權(quán)限細化,使用預(yù)編譯SQL、MD5混合加密以及時間令牌加密關(guān)鍵數(shù)據(jù),防止常規(guī)黑客攻擊,具體實現(xiàn)如下。
首先在Java Web工程的web.xml文件中聲明一個Shiro Servlet過濾器以實現(xiàn)Shiro與Web應(yīng)用的集成[9]。
其次,在與Shiro集成的Spring配置文件ApplicationContext.xml中配置不同用戶的訪問權(quán)限。
其中anon表示允許用戶匿名訪問以/login.jsp開頭的URL,perms表示需要特定用戶認證才能使用,如/page_base_staff.action=perms["staff"]表示僅當(dāng)認證用戶為stuff才能訪問此路徑。authc表示主要用戶通過認證即可訪問以/*開頭的URL。
基于Shiro框架的政協(xié)提案系統(tǒng)采用預(yù)編譯SQL命令以及正則約束來實現(xiàn)SQL注入式攻擊的防范。下面分別介紹兩種方式在系統(tǒng)中的使用:
(1)在用戶登錄過程中,采用預(yù)編譯SQL語句來實現(xiàn),使攻擊者無法改變SQL的結(jié)構(gòu)。用戶傳遞的參數(shù)采用“?”占位。
ps對象包含語句“select*from t_user where uid=?”,它已發(fā)送給DBMS,并為執(zhí)行作好了準(zhǔn)備。在執(zhí)行PreparedStatement對象之前,必須設(shè)置每個?參數(shù)的值。無論參數(shù)值為什么,此SQL命令不會發(fā)生變化。
(2)使用正則表達式來過濾傳入的參數(shù),首先需要創(chuàng)建正則表達式String CHECKSQL=“^(.+)\sand\s(.+)|(.+)\sor(.+)\s$”;再進行判斷是否匹配Pattern.matches(CHECKSQL,targerStr)。 其 中targerStr表示傳入的參數(shù),CHECKSQL表示約束條件,當(dāng)判斷為true時傳入的參數(shù)無效,頁面提示用戶輸入不合法。
基于Shiro框架的政協(xié)提案系統(tǒng)的驗證碼實現(xiàn)主要包含對驗證碼字符的隨機生成、干擾線的隨機添加以及關(guān)鍵字符的拉伸變形。
首先隨機生成n位驗證碼字符,代碼如下:
其中,n為生成驗證碼字符個數(shù);ele為驗證碼可選字符數(shù)組。然后對驗證碼圖片進行隨機線條干擾和旋轉(zhuǎn)拉伸:
為了提高政協(xié)提案系統(tǒng)的安全性,在密碼方面采用了MD5混合加密算法,防止單一MD5加密被查表攻破,具體實現(xiàn)代碼如下:
其中m,n取值范圍在0-32之間,且m<n。string_left、string_right為系統(tǒng)默認提供的前置字符串和后置字符串。
為了防止數(shù)據(jù)在網(wǎng)絡(luò)傳輸過程中被截獲破譯,政協(xié)提案系統(tǒng)采用了時間令牌來防止網(wǎng)絡(luò)監(jiān)聽。
首先,在用戶發(fā)起請求時,由服務(wù)器生成一個包含時間的認證令牌,并將該令牌放入session容器中以便于識別用戶是否為正常認證。
當(dāng)用戶進行登錄認證時,系統(tǒng)自動將密碼與時間令牌進行組合并使用MD5進行加密再發(fā)送服務(wù)端進行認證。
服務(wù)端在接受到客戶端的認證數(shù)據(jù)后,系統(tǒng)自動從session域中獲得請求用戶的時間令牌,從數(shù)據(jù)庫中獲取用戶信息,并將兩組數(shù)據(jù)按照與客戶端相同的加密方法進行加密,得到密文db_pwd。比對服務(wù)器密文db_pwd與用戶提交密文user_pwd是否匹配并將時間令牌進行銷毀,匹配成功則認證通過,反之認證失敗。
本文通過對政協(xié)提案系統(tǒng)的安全性進行了詳細的分析和設(shè)計,并提出了基于Shiro安全框架的政協(xié)提案系統(tǒng),使程序授權(quán)更加靈活,權(quán)限控制更加嚴格,系統(tǒng)更加安全。針對普通系統(tǒng)存在的SQL注入漏洞、明文密碼以及網(wǎng)絡(luò)監(jiān)聽,系統(tǒng)采用了預(yù)編譯SQL、驗證碼、MD5混合加密以及時間令牌等技術(shù)。經(jīng)驗證系統(tǒng)很好地防范了上述安全問題,提高了系統(tǒng)的安全性。