摘要:在開放和共享的Internet環境下,安全問題在動態網站的構建中顯得尤為重要。該文系統深入地分析了當今流行的動態網站構建技術(MySQL+Tomcat+Apache+JSP)WEB服務器范圍內的安全性和相關的安全配置。
關鍵詞:動態網站;JSP;MySQL;Tomcat;Apache
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2009)33-9385-02
The Analysis of Dynamic Web Site Building Technology
HE Qian
(Chongqing College of Electronic Engineering,Chongqing 401331, China)
Abstract: In a liberalized and shared Internet environment, the security problems in the construction of a dynamic Web site are very important. This article system in-depth analysis of today's popular dynamic Web site building technology for server-wide security and related security configuration.
Key words: dynamic Web site; JSP; MySQL; tomcat; apache
隨著Internet的迅猛發展和WEB服務的廣泛應用,動態網站早已以絕對的優勢取代了靜態網站。由于JSP(JavaServer Pages)能夠開發出跨平臺的WEB應用,在眾多的動態網站構建技術中,基于Java技術的JSP脫穎而出。
使用JSP構建動態網站需要配置相應的環境,包括后臺數據庫的安裝配置,WEB服務器和JSP引擎的安裝配置。配置這樣的環境可以有多種途徑,當今技術中占主流的方案是MySQL數據庫+Tomcat引擎+Apache服務器。MySQL數據庫是一款性能相當不錯的關系型數據庫管理系統,而且它是開源免費的,這使得它成為構建中小型動態網站的后臺數據庫的首選。Tomcat服務器是一種能夠組織開發的JSP引擎,本身具有WEB服務器的功能,可以作為獨立的WEB服務器來使用[1]。但是,在作為WEB服務器方面,Tomcat處理靜態HTML頁面時不如Apache迅速,也沒有Apache健壯,因此,將Tomcat和Apache結合起來使用是一個非常科學的組合。這種情況下,Apache主要處理用戶對網站的靜態頁面的請求服務,而Tomcat則專門作為JSP引擎,提供JSP解析。
網絡環境下的開放性和共享性給動態網站帶來了一系列的安全問題。本文不討論如何利用上述技術來構建動態網站,而是主要分析利用MySQL+Tomcat+Apache+JSP技術構建動態網站中的安全性。
1 動態網站構建的安全問題
動態網站是利用Internet提供WEB服務的機構,動態網站的安全問題也就是人們常說的WEB安全問題。這是一個非常復雜的系統問題,包括WEB服務器安全、WEB應用服務器安全、WEB應用程序(這里主要是由JSP創建的動態頁面腳本)安全、數據傳輸安全和應用客戶端安全[2]。下面分別對MySQL、Tomcat、Apache和JSP的安全性及其安全配置進行深入系統的分析。
1.1 MySQL數據庫的安全性和安全配置
數據庫是動態網站得以運行的基礎。與其他所有的DBMS一樣,MySQL也提供了相應的安全設置和安全配置來保證數據和數據庫本身的安全。然而,如果配置不當,將會引發很多嚴重的安全問題。下面將系統地分析這些安全問題以及應對措施。
1) MySQL數據的權限控制問題
MySQL數據庫支持用戶及用戶權限管理。這個安全機制是通過MySQL數據庫自身提供的授權表來實現的。MySQL數據庫的權限控制的管理是通過它的授權表(共六個,分別為:columns_priv,db,func,host,tables_priv和user)來實現。運行desc user命令即可查看本數據庫的權限設置。在MySQL的權限控制機制中存在三個嚴重的安全漏洞。
第一個安全漏洞來自MySQL支持的匿名用戶功能。MySQL提供的匿名用戶功能分為本機的和遠程主機兩種。在安裝完MySQL時,安裝程序會自動創建一個Root用戶和一個匿名用戶(本機),其初始密碼都為空(即沒有密碼)。對于Root用戶,絕大多數DBA都能夠及時地設定一個可靠的密碼,但是,匿名用戶由于默認是只能在本機使用而常常被忽略或者是特意地沒有設置任何密碼,正是這個舉措給動態網站帶來了極大的安全隱患。由于匿名用戶在Localhost上幾乎擁有和Root一樣的權限,因此,任何以匿名用戶登錄網站的人,如果能夠實現在MySQL服務器本機上運行程序,就能夠獲得Root權限,而利用上傳腳本文件可以很輕易地實現這一點。在文獻[3]中就有一個簡單的上傳PHP腳本文件來隨意改動MySQL數據庫權限的實例。
上述問題的解決方法是:如果可以,將匿名用戶刪除,強制要求所有訪問數據庫的用戶都具有自己的用戶名,這樣即使出現了問題,有很容易查找源頭。如果不能刪除匿名用戶,就需要重新設置匿名用戶的權限,使其不具有GRANT(授權)權限,這樣就能防止管理權限不受控制的擴散出去。
另外,默認情況下,MySQL允許在任何主機(遠程)上以匿名用戶登錄而不需要密碼,但遠程登錄的匿名用戶是沒有任何權限的。而我們都知道,黑客滲透服務器的前提就是登錄服務器,而隨后的滲透攻擊時不需要再具備什么權限就可以實現的。因此,將授權表中的遠程匿名用戶登錄許可刪除是增強數據庫服務器安全的有效措施。
第二個安全隱患來自MySQL提供的遠程維護功能。通過查看數據庫安裝后的默認設置后的授權表內容,可以發現,任何主機(遠程的)使用Root用戶登錄是不需要密碼的,并且還擁有非常危險的高權限:可以刪除、修改記錄和表。這是MySQL為遠程維護提供的支持。顯然,這個支持是非常危險的。因此,如果不需要遠程維護,應該確保將授權表中的這一項刪除掉,即便不刪除,也應該為遠程Root登錄設置一個安全可靠的密碼。
第三個安全隱患來自MySQL數據庫的sa賬號的權限控制。sa是MySQL數據庫的最高權限賬號,但默認情況下sa賬號的密碼為空,也就是說,如果沒有特意去設置sa賬號的密碼,使用sa賬號可以不用任何密碼就可以以最高權限登錄數據庫服務器,其危險性顯而易見。該隱患的解決方法是確保系統不存在任何空口令賬號。
2) MySQL安裝目錄權限的安全問題
與大多數安裝程序一樣,MySQL默認情況下也是安裝到C盤中的。C盤由于通常是作為系統盤使用的,而系統盤的身份覺得了系統管理員在沒有數據庫密碼的情況下也可以通過選擇Windows驗證來操作數據庫。這樣,如果有人冒充系統管理員,或者普通用戶通過系統漏洞將自己的權限提升為系統管理員,就可以對數據庫進行破壞。
該缺陷的解決方案是更改MySQL的安裝目錄,將其安裝到可以進行嚴格的權限控制的非系統盤上,并在數據庫運行期間定期地查看是否有可疑的登錄事件發生。
1.2 Tomcat和Apache服務器的安全性和安全配置
為了增強安全性,WEB應用提供了安全域機制來保護WEB應用資源。安全域需要通過部署WEB應用的服務器的相關設置來實現。這里詳細分析Tomcat和Apache服務器中的安全域機制及其安全可靠的配置方案。
1) Tomcat安全域及其配置
Tomcat的安全域配置驗證步驟分為四步:第一步建立角色和用戶信息庫;第二步設置安全驗證界面及出錯信息提示界面;第三步是為WEB資源建立安全約束;第四步是為WEB資源配置安全域[4]。通過安全域機制,可以將用戶名、密碼、用戶角色集成到Tomcat服務器中,從而對服務器中的WEB應用資源實現基于角色的訪問控制,實現其安全性。Tomcat為此提供了相應的接口,該接口名為org.apache.catalina.Realms,在Tomcat的安裝目錄里可以找到該接口文件。利用內存域或JDBC域或其他的方式可以實現該接口完成安全域配置。由于內存域和JDBC域是最常見的兩種配置實現方式,因此下面介紹利用這兩種方式來進行安全域的配置。
在org.apache.catalina.Realms.MemoryRealm類中定義了內存域,創建該類的一個實例來配置WEB安全域。首先打開
利用類org.apache.catalina.Realms.JDBCRealm類也可以實現安全域,這種實現方式稱為JDBC域實現,其創建配置過程與內存域的實現基本上相同,其具體的代碼設置及過程請參考文獻[5]。
2) Apache的安全配置
作為WEB服務器的Apache服務器同樣也具有自己的安全模塊。Apache提供了有效的訪問控制機制,包括選擇性訪問控制DAC,它是基于用戶名和密碼來實現的;還包括強制性訪問控制MAC,它依據發出請求的客戶端的IP地址或所在的域號來進行鑒定。同時,Apache還提供認證、授權等一系列的安全服務。
Apache的mod_access模塊提供了基于主機的訪問控制,配置該模塊,Apache便能夠根據訪問者的IP地址、或域名、或主機名來控制對Apache服務器的訪問。
Apache通過mod_auth模塊來控制用戶和組的認證授權。mod_auth又進一步地分為mod_auth_digest模塊和mod_auth_anon模塊。mod_auth_digest模塊采用MD5數字簽名的方式來進行用戶認證,mod_auth_anon模塊運行匿名登錄,用戶以匿名用戶登錄時需要輸入一個E-mail地址作為口令。為了便于管理和提高效率,Apache將用戶的相關信息都存放在一個專門的小型數據庫中。
匿名用戶同樣也是Apache服務器的一大安全隱患。由于通常情況下,Apache都是由Root身份來安裝和運行的,這樣,Apache Sever進程就具有Root用戶特權,即使是匿名用戶,如果他能夠運行Apache Sever進程,他也就能獲得Root權限。該安全問題的解決方案是修改默認安裝后的httpd.conf配置文件,將匿名用戶的權限進行修改,從而使以匿名用戶運行Apache是杜絕其安全隱患。
Apache的另一個安全隱患時其主目錄的權限問題。只有嚴格地控制其主目錄的訪問權限,使非超級用戶不能修改該目錄中的內容才能增強Apache服務器的安全性。該項的修改在其配置文件httpd.conf的SeverRoot控制項中。
2 總結
該文系統全面地分析了當今流行的JSP動態網站構建技術的安全性——MySQL數據庫+Tomcat引擎+Apache服務器。論文在分析其安全機制的基礎上討論了其安全隱患,并針對具體的問題給出了相應的解決方案或措施。
由于篇幅原因,該文只對網站的服務器部分的安全性和安全配置進行了詳細的分析和說明。關于JSP及腳本安全方面的內容請參閱其他文獻。
參考文獻:
[1] 劉濤,賈遂民.淺析Windows下JSP開發環境的配置[J].福建電腦,2004(11):74-75.
[2] 丁妮.Web應用安全研究[D].南京信息工程大學,2007:2.
[3] 朱洪江.MYSQL數據庫的安全漏洞及防范方法[J].黑龍江科技信息,2009(10):96.
[4] 陳文兵,張天良.Web應用中的安全認證問題[J].河南科技學院學報(自然科學版),2008,6,36(2):110-113.
[5] 朱興亮,李建章.Tomcat安全域的配置及應用[J].中國科技信息,2006(23):127-129.