陳姍 萬曉燕
摘 要:本文本文以網上基金交易平臺這個項目為例,探討了項目開發中權限控制、加密方法等安全性問題。
關鍵詞:SSH;權限控制;MD5加密
隨著Java技術的逐漸成熟與完善,作為建立企業級應用的標準平臺,J2EE平臺得到了長足的發展,Struts+Spring+Hiber
nate三者結合起來成為當今企業開發中普遍使用的一種快速高效的開發模式。但是,作者在利用這種模式進行實際項目開發時遇到了很多安全性的問題。本文以網上基金交易平臺項目為例,探討了基于SSH的項目在開發過程中會遇到的重要安全性問題以及相應的解決方案。
一、SSH開發模式
SSH模式是基于J2EE架構的一種Framework,用Struts實現表示層,用Spring實現業務層,用Hibernate實現持久層,然后把這三者整合起來應用到項目開發中。
Struts是 Apache Jakarta項目推出的一個開源的Java Web框架,它很好的實現了MVC設計模式。Spring是一款近幾年非常流行的、開源的開發框架,Spring的核心是一個實現了IoC(Inversion of Control)模式的輕量級容器。Hibernate是目前最流行的ORM框架,是連接Java對象模型(java object modle)和關系數據模型的橋梁,它對JDBC進行了輕量級的封裝,不僅提供ORM映射服務,還提供數據查詢和數據緩沖功能。
二、SSH開發中存在的安全性問題及解決方案
本文下面以項目中登陸模塊為例,探討一下針對這些安全性問題的解決方案。
(一)權限控制實現。在本系統中,需要權限管理的問題有很多。下面舉其中一個作為例子,說明一下我們關于權限控制的實現思路。
基金交易操作人員分兩個等級,高級操作人員可以注冊新的操作員、對基金進行增刪改的操作,而普通操作人員僅能進行查詢基金信息、買賣基金等操作。我們定義不同的變量區分不同操作任務,如delFund代表刪除基金,值“1”為有權限,值“0”為無權限。
為了存取的方便和信息的安全,我們將所有權限信息封裝在一個類UserInfo中,在用戶登錄系統后根據用戶的角色將其權限寫入session,當用戶要進行某個操作時,我們首先從
session中取出其權限值進行判斷,如果權限不夠則返回到相應的報錯頁面,并在log中記錄該越權操作,在用戶退出系統后銷毀session中相應的權限數據。
由于本系統采用SSH整合模式,我們可以利用AOP編程實現細粒度的權限管理。定義一個權限管理模塊,在Dele
gatingActionProxy中調用該權限管理模塊針對具體的對象和操作進行權限判斷,如果具有該權限,則將請求發生到相應的
Action操作。經過這樣的設計處理后,很好的實現了權限控制,而且系統代碼耦合性低、易于擴展。
(二)防止SQL注入式攻擊。SQL注入就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。常見的一種攻擊方式是,有查詢語句:
statement := "SELECT * FROM users WHERE name = '"
+ userName + "';
該語句的目的本來在于測試用戶名是否合法,但是,如果用戶名被一個惡意的用戶用一種特定的方式偽造,這個語句所執行的操作就不是代碼的作者所期望的那樣了。例如,將用戶名變量(即username)設置為:a' or 't'='t,此時原始語句發生了變化:SELECT * FROM users WHERE name = 'a' OR 't'='t';這樣一來,在認證過程中,用戶名就被認為永久性合法了,這對于web系統來說顯然是非常危險的。
SQL注入是從正常的WWW端口訪問,而且表面看起來跟一般的Web頁面訪問沒什么區別,所以目前市面的防火墻都不會對SQL注入發出警報,如果管理員沒查看IIS日志的習慣,可能被入侵很長時間都不會發覺。
基金交易系統式非常容易受到這種攻擊的,侵入者通常采用這種方式盜取客戶的帳戶和密碼,使客戶蒙受巨大的經濟損失,所以如何防止SQL注入式攻擊也是作者在系統設計中著重考慮的一個問題。經過一系列實驗和探討,作者最終采用了如下方法。
以往作者直接使用JDBC連接數據庫時,通常采用
PrepareStatement來解決注入式攻擊的問題,在SSH架構中,持久層使用的是Hibernate連接,所以使用采用占位符防止SQL注入式攻擊更為簡單。
結束語:對于web應用系統的搭建來說,系統的安全性是一個至關重要的問題,經過作者在權限控制、加密、驗證碼、sql注入式攻擊幾方面的改進之后,整個系統具有了更好的安全性和健壯性,同時還保證了代碼的低耦合和易于擴展。本文討論的SSH模式的幾種安全方案具有很好的實踐意義,是對SSH模式一個很好的改進。
參考文獻:
[1] Struts official network..The apache software foundation [EB/OL]. http://struts.apache.org/.
[2] Hibernate official network.Relational Persistence for Java and.NET[EB/OL]. http://www.hibernate.org.