陳昀 孟潔
摘要:該文介紹了開源免費的Apache網(wǎng)站服務器軟件及mod_rewrite重寫模塊,通過分析模塊規(guī)則將其應用到網(wǎng)站安全中。
關鍵詞:Apache;mod_rewrite;網(wǎng)站安全
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2016)02-0021-02
Apache以其穩(wěn)定性、高可擴展性,在互聯(lián)網(wǎng)網(wǎng)站服務器領域贏得絕對第一的市場占有率?;ヂ?lián)網(wǎng)中大部分網(wǎng)站采用Apache作為其后臺服務程序,而網(wǎng)絡上針對采用Apache提供服務支持網(wǎng)站的攻擊也是非常頻繁。隨著網(wǎng)站應用系統(tǒng)不斷地建設及陸續(xù)投入運行,這些網(wǎng)站應用程序本身所帶來的安全漏洞也越來越多。目前基于網(wǎng)站的各種應用直接承載有各類虛擬資產(chǎn),而這類虛擬資產(chǎn)可以方便的轉(zhuǎn)換為現(xiàn)實經(jīng)濟價值。很顯然,此類網(wǎng)站應用系統(tǒng)將會成為以經(jīng)濟利益為驅(qū)動的攻擊首選。
針對網(wǎng)站應用層的攻擊,如SQL注入攻擊、XSS跨站腳本攻擊、惡意代碼等是傳統(tǒng)網(wǎng)絡安全產(chǎn)品如防火墻、IDS/IPS設備所不能防御的。但這些針對網(wǎng)站的攻擊必須經(jīng)過網(wǎng)站服務器程序,故在Apache網(wǎng)站服務器程序?qū)用鎸暨M行防御,將非常有效的降低網(wǎng)站應用本身所帶來的安全隱患。對于采用Apache的網(wǎng)站來說,借助于mod_rewrite模塊實施安全策略,將大大提高網(wǎng)站的安全性。
1 Apache簡介
互聯(lián)網(wǎng)領域中的Apache指的是Apache網(wǎng)站服務器軟件,被廣泛應用于互聯(lián)網(wǎng)網(wǎng)站服務器中。其前身為美國國家計算機安全協(xié)會開發(fā)的網(wǎng)站服務器軟件,Apache項目開始于1995年,之后其開始取代原網(wǎng)站服務器軟件的市場,并于1996年4月開始一直維持其霸主地位。到2015年初有近3.5億的網(wǎng)站使用的是Apache作為其服務器后臺為網(wǎng)站提供服務。
Apache由Apache軟件基金會開發(fā)和維護,主要用于但不限于類Unix系統(tǒng)。各種操作系統(tǒng)環(huán)境中都可以見到Apache的身影,包括Unix、FreeBSD、Linux、Solari、Novell NetWare、OS X、Windows和OpenVMS。Apache采用Apache授權協(xié)議,保障其采用源代碼的方式發(fā)布。Apache項目的目標就是提供一個安全、有效和可擴展的網(wǎng)站服務器軟件。其開發(fā)進度維持與HTTP標準的同步。
2 mod_rewrite模塊分析
Apache的擴展是通過加載功能模塊來實現(xiàn)的,mod_rewrite為一個基于規(guī)則的URL重寫模塊。該模塊采用基于規(guī)則的正則表達式引擎,對網(wǎng)站訪問請求中的URL進行實時的重寫。模塊支持無限數(shù)量的規(guī)則和無限數(shù)量的條件判斷,條件判斷的范圍非常廣,可以是服務器變量、環(huán)境變量、HTTP頭、時間戳等,甚至可以是對外部數(shù)據(jù)庫查詢的結果。
mod_rewrite模塊對整個URL進行操作,可用于生成URL查詢串、可指向內(nèi)部處理進程、外部URL重定向或者內(nèi)部代理。mod_rewrite模塊的特性如下:
1) 強大的PCRE正則表達式分析引擎;
2) 無限的規(guī)則數(shù);
3) 每個規(guī)則中無限的條件判斷。
mod_rewrite模塊功能非常強大,因此也可以設置的非常復雜。除了基本的URL重寫功能外,mod_rewrite模塊還能實現(xiàn)如下高級功能:
1) 訪問控制;
2) 動態(tài)虛擬主機;
3) 動態(tài)代理;
4) 負載均衡;
5) 基于時間的URL重寫;
6) URL重新定向和重新映射。
通過mod_rewrite模塊的訪問控制功能,可在Apache網(wǎng)站服務器層面對HTTP請求方法、客戶端請求、Referrer、Cookies和查詢字符串方面對網(wǎng)站安全進行強化。
3 mod_rewrite強化網(wǎng)站安全
新版本中的Apache默認都已加載mod_rewrite模塊,只需確認Apache主配置文件httpd.conf中有該模塊的加載語句即可:LoadModule rewrite_module modules/mod_rewrite.so。
3.1 過濾HTTP方法
目前的HTTP協(xié)議定義了GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE 、CONNECT和PATCH方法,每個方法都有具體的應用場合,但作為一個常規(guī)網(wǎng)站來說,用到的方法只有GET和POST。通過mode_rewrite模塊可以對不使用的方法進行排除,以降低網(wǎng)站遭受攻擊的可能性。限定非GET和POST方法的規(guī)則指令如下:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(head|options|put|delete|trace|connect|patch) [NC]
RewriteRule ^(.*)$ - [F,L]
3.2審查客戶端請求
客戶端向網(wǎng)站服務器端發(fā)送的請求包含HTTP方法、URI和傳輸協(xié)議版本。通過mod_rewrite審查客戶端請求中的非法字符串,降低網(wǎng)站遭遇HTTP回應拆分、XSS跨站腳本攻擊、緩存毒化等攻擊的風險。對客戶端請求及請求中的URI進行審查的規(guī)則指令如下:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*(,|;|:|<|>|”>|”<|/|\\\.\.\\).* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*(\=|\@|\[|\]|\^|\`|\{|\}|\~).* [NC,OR]
RewriteCond %{REQUEST_URI} ^.*(\|%27|%3C|%3E|%00).* [NC]
RewriteRule ^(.*)$ - [F,L]
3.3限定Referrer
HTTP協(xié)議中的Referrer用于追溯一個網(wǎng)頁訪問的來源。因其在互聯(lián)網(wǎng)的SEO領域有一定分值,故常被惡意使用。使用mod_rewrite模塊的HTTP_REFERER變量,可以對惡意Referrer進行限定:
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^(.*)(<|>||%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?adult(-|.).*$ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?.*(-|.)?sex(-|.).*$ [NC]
RewriteRule ^(.*)$ - [F,L]
3.4排查Cookies
Cookies是網(wǎng)站服務端存儲在客戶端一些數(shù)據(jù),往往以文件方式存在在客戶端計算機中。網(wǎng)站使用Cookies技術追蹤用戶信息,如登錄狀態(tài)、登錄時間、個人偏好、購物車信息等。但Cookies也被攻擊者利用來對網(wǎng)站進行Cookie毒化、XSS跨站腳本攻擊和跨站Cookie攻擊等。使用mod_rewrite模塊的HTTP_COOKIE變量,可以對惡意Cookie進行排查:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} ^.*(<|>||%0A|%0D|%27|%3C|%3E|%00).* [NC]
RewriteRule ^(.*)$ - [F,L]
3.5過濾查詢字符串
URL中的查詢字符串用于與服務器端腳本和數(shù)據(jù)庫進行交互,攻擊者通過在其中加入惡意字符和攻擊代碼來實現(xiàn)對網(wǎng)站的攻擊。使用mod_rewrite模塊的QUERY _STRING變量,對查詢字符串的合法性和內(nèi)容進行檢查,對于包含惡意字符和攻擊代碼的請求進行拒絕。相關指令如下:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
RewriteCond %{QUERY_STRING} \
^.*(\.|\*|;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{QUERY_STRING} \
^.*(md5|benchmark|union|select|insert|cast|set|declare|drop|update).* [NC]
RewriteRule ^(.*)$ - [F,L]
4 結論
通過Apache mod_rewrite模塊的訪問控制功能,可在Apache網(wǎng)站服務器層面對HTTP請求方法、客戶端請求、Referrer、Cookies和查詢字符串方面對網(wǎng)站安全進行強化。規(guī)則變量REQUEST_METHOD、THE_REQUEST、REQUEST_URI、HTTP_REFERER、HTTP_COOKIE和QUERY_STRING可單獨使用,也可結合應用在復雜的網(wǎng)站服務器環(huán)境中,借助于mode_rewrite模塊進行實施,可以有效提高網(wǎng)站的安全性。
參考文獻:
[1] Apache Software Fundation, Apache Module mod_rewrite [EB/OL]. http://httpd.apache.org/docs/2.4/en/mod/mod_rewrite.html, 2015-01-01/2015-03-17
[2] February 2015 Web Server Survey [EB/OL]. http://news.netcraft.com/archives/2015/02/24/february-2015-web-server-survey.html, 2015-02-24/2015-03-17
[3] Jeff Starr, Eight Ways to Blacklist with Apaches mod_rewrite [EB/OL]. http://perishablepress.com/eight-ways-to-blacklist-with-apaches-mod_rewrite/, 2009-02-03/2015-03-17