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