1. 程式人生 > >Apache攔截HTTP請求

Apache攔截HTTP請求

有些時候,為了保證Web應用的安全性,可以選擇在Apache伺服器中將一些危險的HTTP請求過濾,例如DELETE請求,也可以將系統不作處理的無效請求過濾,例如TRACE、OPTIONS請求,以防入侵者傳送大量請求給伺服器,造成系統負擔。

Apache伺服器可以通過修改http.conf檔案來達到上述目的。Apache核心指令中,<Limit>/<LimitExcept>配置段用於對指定的HTTP方法進行訪問控制,<Directory>/<Files>/<Location>配置段則是用於將它們封裝起來的指令集作用於指定的目錄、檔案或網路空間(詳見《Apache核心(Core)指令<Location>和<Directory>區別》)。因此,將<Limit>/<LimitExcept>配置段和<Directory>/<Files>/<Location>配置段聯合起來,就能實現Apache對指定HTTP請求進行訪問控制的功能。它們的配置形式(以<Directory>和<Limit>/<LimitExcept>說明)可以表示如下:

1
2
3
4
5
6
7
[text] view plaincopyprint?
  1. <Directory "C:/apache/www">  
  2. <Limit DELETE TRACE OPTIONS>  
  3.     #禁止DELETE TRACE OPTIONS請求  
  4.     Order allow,deny  
  5.     Deny from all  
  6. </Limit>  
  7. </Directory>  

上述配置表示,對於任何用DELETE、TRACE、OPTIONS方法訪問C:/apache/www目錄裡資原始檔的請求都會被apache伺服器拒絕(403 Fobidden)。還可以這樣表示:

1
2
3
4
5
6
7
[text] view plaincopyprint?
  1. <Directory "C:/apache/www">  
  2. <LimitExcept GET POST HEAD>  
  3.     #禁止除GET POST HEAD以外的請求  
  4.     Order allow,deny  
  5.     Deny from all  
  6. </Limit>  
  7. </Directory>  

這段配置表示,對於任何用GET、POST、HEAD方法訪問C:/apache/www目錄裡資原始檔的請求都會被apache伺服器拒絕(403 Fobidden)。相當於前一個(<Limit>)是黑名單策略,後一個(<LimitExcept>)是白名單策略。

為方便測試,可以用Telnet模擬HTTP請求來對配置進行驗證:
1、模擬GET請求,HTTP返回碼為200 OK,表示GET請求正常執行,如下圖所示:

2、模擬DELETE請求,HTTP返回碼為403 Forbidden,表示DELETE請求被禁止,如下圖所示:

關於這段配置有兩點需要注意的地方:
1、配置完http.conf檔案後,必須重啟apache服務,配置才能生效。
2、<Limit>/<LimitExcept>配置段裡的Order、Allow、Deny指令需載入mod_authz_host.so模組,否則無法使用[1]