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