Apache拦截HTTP请求,apache拦截请求


有些时候,为了保证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?
<Directory "C:/apache/www">
<Limit DELETE TRACE OPTIONS>
    #禁止DELETE TRACE OPTIONS请求
    Order allow,deny
    Deny from all
</Limit>
</Directory>

上述配置表示,对于任何用DELETE、TRACE、OPTIONS方法访问C:/apache/www目录里资源文件的请求都会被apache服务器拒绝(403 Fobidden)。还可以这样表示:

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

相关内容

    暂无相关文章