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
  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
  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]

阅读更多
个人分类: Linux
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭