柯芬芬,劉志華
摘 要:隨著互聯(lián)網(wǎng)技術的不斷發(fā)展,以Web環(huán)境作為切入點的互聯(lián)網(wǎng)應用也越來越普及,使得Web應用安全成為時下的熱點。文章主要研究如何在SSM框架中融合Shiro安全框架和部分Web漏洞攻擊的防護代碼,旨在設計出一個健壯性強、靈活性高的Web應用安全方案。
關鍵詞:Web安全;Shiro;SSM框架集
伴隨著互聯(lián)網(wǎng)技術的不斷發(fā)展與升級,企業(yè)信息化系統(tǒng)的建設以及網(wǎng)絡環(huán)境也趨于完善。以Web環(huán)境作為切入點的互聯(lián)網(wǎng)應用呈現(xiàn)“井噴式”發(fā)展態(tài)勢,但隨之而來的是Web安全問題的凸顯[1]。當前主流的Web應用開發(fā)通常會采用SSM(Spring+SpringMVC+Mybatis)框架構建,其構建的Web項目能夠提高項目的開發(fā)效率,降低項目開發(fā)和維護方面的成本。為了有效適應現(xiàn)代Web系統(tǒng)對安全性能的運行需求,文章考慮對SSM框架做進一步的優(yōu)化,一是融合Shiro安全框架來加強系統(tǒng)認證與訪問控制;二是集成一些Web安全漏洞的防護代碼。
1 關鍵技術介紹
1.1 常見的Web安全漏洞
阿里云安全團隊發(fā)布的《2019年上半年Web應用安全報告》[2],從傳統(tǒng)攻擊的分布數(shù)據(jù)來看,Webshell攻擊以29%的比例奪得榜首,SQL注入以26%的比例緊隨其后,跨站腳本攻擊(Cross Site Scripting,XSS)的占比為4%,可見傳統(tǒng)的Web攻擊手段備受攻擊者青睞。下面對常見的Web系統(tǒng)安全漏洞進行詳細介紹。
1.1.1 SQL注入攻擊
SQL注入攻擊是指惡意攻擊者利用現(xiàn)有的瀏覽器/服務器模式(Browser/Server,B/S)架構,將惡意的結構化查詢語言(Structured Query Language,SQL)通過用戶請求的URL或者Web表單的輸入域傳遞給后臺程序,欺騙服務器調用SQL數(shù)據(jù)庫引擎來執(zhí)行惡意SQL命令,從而達到攻擊的目的。缺乏經驗的開發(fā)人員在編碼時容易忽略對用戶輸入的參數(shù)進行非法性過濾處理,導致了惡意攻擊者利用這一漏洞,采用SQL攻擊方式來獲取數(shù)據(jù)庫的所有數(shù)據(jù),更有甚者是拿到操作數(shù)據(jù)庫的最高權限,對整個數(shù)據(jù)庫進行增、刪、改、查(CRUD)操作。
1.1.2 XSS攻擊
XSS攻擊又稱跨站腳本攻擊,之所以簡寫為XSS,是為了與層疊樣式表(Cascading Style Sheets,CSS)的縮寫區(qū)分開來。XSS攻擊是指攻擊者巧妙地將惡意腳本代碼注入Web網(wǎng)頁中,當用戶瀏覽加載網(wǎng)頁時,程序會自動執(zhí)行惡意代碼,從而實現(xiàn)對用戶瀏覽器的控制,以此來達到攻擊的目的。
1.1.3 文件上傳漏洞攻擊
文件上傳漏洞指的是惡意攻擊者將某個木馬、病毒和腳本等可執(zhí)行文件上傳到服務器,從而達到攻擊的目的。造成文件上傳漏洞的原因有以下兩點,一是開發(fā)人員在編寫上傳模塊代碼時沒有去檢查用戶上傳的文件類型和內容,同時也沒有對上傳的文件目錄設置不可執(zhí)行權限;二是攻擊者繞開Web前端js對文件后綴的判斷,篡改HTTP Header頭部請求信息。
1.2 SSM
SSM框架采用了標準的MVC模式,將Web系統(tǒng)劃分為View表示層、Controller控制層、Service業(yè)務邏輯層、DAO數(shù)據(jù)訪問層4層。融合MVC設計模式的目的在于后臺開發(fā)人員只需重點關注具體的業(yè)務邏輯,前端開發(fā)人員只關注數(shù)據(jù)的表現(xiàn)形式即可,大大縮減了Web系統(tǒng)的開發(fā)時間。
Spring是一個可以用來生產bean的工廠輕量級框架,幫助創(chuàng)建對象以及管理對象之間的依賴關系,降低對象之間的耦合度,從而簡化企業(yè)級Web應用程序開發(fā)。Spring MVC是Spring框架提供的一個實現(xiàn)了Web MVC設計模式的輕量級Web框架,主要負責請求的轉發(fā)和視圖管理。Mybatis框架是當前Web應用開發(fā)中流行的一種持久化ORM框架,其對JDBC進行了封裝與簡化,開發(fā)者無需編寫相關JDBC的繁瑣代碼,只須關心如何編寫SQL語句即可。
1.3 Shiro
Shiro是一個強大且易用的Java安全框架[3],能夠為命令行應用、移動應用、大型網(wǎng)絡應用以及企業(yè)應用提供安全保障。Shiro提供身份認證、授權、加密以及會話管理等功能,其中Shiro的認證功能主要是對用戶的登錄操作進行認證,驗證用戶是否擁有系統(tǒng)相應的身份,判斷登錄用戶是否合法;Shiro的授權功能主要是驗證某個已認證身份的用戶是否擁有某些內容的訪問權限,也就說認證用戶想要操作應用程序資源的話需具備相應的訪問權限;Shiro的會話管理功能主要是指用戶成功登錄應用后,在未退出應用前,其所有信息都保存在會話中,這樣在多次交互過程中,應用就能夠識別出當前訪問的用戶到底是誰。
2 基于SSM的Web應用安全機制設計
在SSM框架中融合Shiro安全框架的目的在于進行認證授權,對于需要訪問控制的用戶首先經過身份認證,認證通過后用戶根據(jù)擁有的資源訪問權限來訪問相應的內容。采用基于角色的訪問控制模式,提供完善的認證授權功能。在數(shù)據(jù)庫設計當中,配置系統(tǒng)用戶表、角色信息表、系統(tǒng)權限表3張基礎表,考慮用戶與角色之間、角色與權限之間是多對多的關系,所以還要建立用戶和角色關系表、角色和權限關系表2張中間表。以角色為中心來進行訪問控制,使得全部權限都和角色建立了緊密的聯(lián)系。
為了有效減少SQL,XSS注入的攻擊,開發(fā)者在編寫后臺代碼中應該對用戶提交的數(shù)據(jù)進行相應的過濾和驗證,盡可能減少被注入SQL和XSS代碼的風險。另外考慮在Mybatis框架中設計SQL注入漏洞修復方案,在Spring框架的Java后臺接口層面中設計自定義攔截器類來防止SQL和XSS代碼的注入。
3 基于SSM的Web應用安全機制實現(xiàn)
3.1 集成SQL/XSS注入攻擊的防護代碼
在Spring框架的Java后臺接口層面中自定義一個攔截器類實現(xiàn)HandlerInterceptor接口,且重寫接口preHandle,postHandle和afterCompletion3種方法,封裝過濾SQL/XSS注入攻擊的代碼,當然還需要配置攔截器,在這里就不列出相關代碼。
另外,還需要考慮在Mybatis框架中設計SQL注入漏洞修復方案,主要是在進行模糊查詢like時,采用預編譯機制來避免SQL語句拼接的問題。在使用in語句進行多值查詢時,可使用Mybatis自帶循環(huán)指令解決SQL語句動態(tài)拼接的問題。
3.2 集成文件上傳漏洞攻擊的防護代碼
第一步:在Web前端js文件中通過substr或者substring方法來提取上傳文件的后綴名,驗證文件類型是否合法。
第二步:Web后臺代碼先利用MultipartFile類來接受前端傳過來的文件信息,然后通過MultipartFile類的getSize()方法檢查上傳的文件大小是否符合要求,借助文件類型工具類FileTypeUtil的getType()方法來獲得文件類型,主要是依據(jù)文件流頭部16進制字符串內容來判斷上傳文件類型是否合法。
第三步:Web后臺代碼對上傳的文件按照一定規(guī)則進行重命名,且禁止用戶修改文件名。另外,文件上傳成功后將真實上傳路徑和訪問路徑做一個映射,當用戶在線預覽或者下載文件時,直接暴露訪問路徑給用戶即可。
3.3 實現(xiàn)SSM框架與Shiro安全框架的整合
第一步:在pom.xml文件中引入Shiro安全框架的所需jar包,可以借助Maven依賴查詢工具獲取最新或歷史版本的jar包,但需要注意的是,Shiro框架相關的jar包版本號導入要保持一致。
第二步:在web.xml文件中配置Shiro的代理過濾器。
第三步:創(chuàng)建Spring整合Shiro安全框架的配置文件來定制自己的Shiro服務,主要配置安全管理器securityManager、自定義的Realm、用戶授權信息Cache以及Shiro的核心配置。
第四步:自定義繼承AuthorizingRealm類的Realm,主要是用來獲取數(shù)據(jù)庫安全數(shù)據(jù),要求開發(fā)人員重寫doGetAuthenticationInfo方法來進行身份認證登錄,查詢數(shù)據(jù)庫判斷登錄用戶的身份是否合法;還需要doGetAuthorizationInfo方法來對已認證的用戶身份進行權限分配。
第五步:在Controller控制器層調用Shiro的login登錄方法來驗證用戶信息,login方法名可自定義命名。
4 結語
在設計基于SSM框架的Web應用安全機制過程中,一方面采用當前主流的SSM框架來提高項目的開發(fā)效率,另一方面融合Shiro安全框架、SQL注入攻擊、XSS注入攻擊和文件上傳漏洞防護代碼來加強Web系統(tǒng)的安全性能。由于篇幅有限,本文僅列出Web應用安全機制的具體通用設計與實現(xiàn)步驟。
基金項目:江西省高校教改課題項目資助;項目編號:JXJG-18-50-1。江西省教育廳科學技術研究項目資助;項目編號:GJJ181281。
作者簡介:柯芬芬(1992— ),女,江西九江人,軟件設計師,碩士;研究方向:信息安全,移動互聯(lián)。
[參考文獻]
[1]陳剛.Web系統(tǒng)安全問題與防護機制研究[J].無線互聯(lián)科技,2019(15):108-109.
[2]阿里云安全團隊.2019年上半年Web應用安全報告[EB/OL].(2019-07-12)[2019-12-20].https://www.secpulse.com/archives/109268.html.
[3]丁潔.基于Shiro的Web應用安全框架設計研究[J].信息與電腦,2018(3):38-39.
Research on Web application security mechanism based on SSM
Ke Fenfen, Liu Zhihua
(Jiangxi Modern Polytechnic College, Nanchang 330095, China)
Abstract:With the continuous development of Internet technology, Internet applications with Web environment as an entry point are becoming more and more popular, which makes Web application security a hot spot. This paper mainly studies how to integrate the protection code of Shiro security framework and some Web vulnerability attacks in the SSM, aiming to design a robust and flexible web application security solution.
Key words:Web security; Shiro; Spring+SpringMVC+MyBatis