APP下载

Apachemod_rewrite分析及其在网站安全中的应用

2016-03-22陈昀孟洁

电脑知识与技术 2016年2期

陈昀 孟洁

摘要:该文介绍了开源免费的Apache网站服务器软件及mod_rewrite重写模块,通过分析模块规则将其应用到网站安全中。

关键词:Apache;mod_rewrite;网站安全

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)02-0021-02

Apache以其稳定性、高可扩展性,在互联网网站服务器领域赢得绝对第一的市场占有率。互联网中大部分网站采用Apache作为其后台服务程序,而网络上针对采用Apache提供服务支持网站的攻击也是非常频繁。随着网站应用系统不断地建设及陆续投入运行,这些网站应用程序本身所带来的安全漏洞也越来越多。目前基于网站的各种应用直接承载有各类虚拟资产,而这类虚拟资产可以方便的转换为现实经济价值。很显然,此类网站应用系统将会成为以经济利益为驱动的攻击首选。

针对网站应用层的攻击,如SQL注入攻击、XSS跨站脚本攻击、恶意代码等是传统网络安全产品如防火墙、IDS/IPS设备所不能防御的。但这些针对网站的攻击必须经过网站服务器程序,故在Apache网站服务器程序层面对攻击进行防御,将非常有效的降低网站应用本身所带来的安全隐患。对于采用Apache的网站来说,借助于mod_rewrite模块实施安全策略,将大大提高网站的安全性。

1 Apache简介

互联网领域中的Apache指的是Apache网站服务器软件,被广泛应用于互联网网站服务器中。其前身为美国国家计算机安全协会开发的网站服务器软件,Apache项目开始于1995年,之后其开始取代原网站服务器软件的市场,并于1996年4月开始一直维持其霸主地位。到2015年初有近3.5亿的网站使用的是Apache作为其服务器后台为网站提供服务。

Apache由Apache软件基金会开发和维护,主要用于但不限于类Unix系统。各种操作系统环境中都可以见到Apache的身影,包括Unix、FreeBSD、Linux、Solari、Novell NetWare、OS X、Windows和OpenVMS。Apache采用Apache授权协议,保障其采用源代码的方式发布。Apache项目的目标就是提供一个安全、有效和可扩展的网站服务器软件。其开发进度维持与HTTP标准的同步。

2 mod_rewrite模块分析

Apache的扩展是通过加载功能模块来实现的,mod_rewrite为一个基于规则的URL重写模块。该模块采用基于规则的正则表达式引擎,对网站访问请求中的URL进行实时的重写。模块支持无限数量的规则和无限数量的条件判断,条件判断的范围非常广,可以是服务器变量、环境变量、HTTP头、时间戳等,甚至可以是对外部数据库查询的结果。

mod_rewrite模块对整个URL进行操作,可用于生成URL查询串、可指向内部处理进程、外部URL重定向或者内部代理。mod_rewrite模块的特性如下:

1) 强大的PCRE正则表达式分析引擎;

2) 无限的规则数;

3) 每个规则中无限的条件判断。

mod_rewrite模块功能非常强大,因此也可以设置的非常复杂。除了基本的URL重写功能外,mod_rewrite模块还能实现如下高级功能:

1) 访问控制;

2) 动态虚拟主机;

3) 动态代理;

4) 负载均衡;

5) 基于时间的URL重写;

6) URL重新定向和重新映射。

通过mod_rewrite模块的访问控制功能,可在Apache网站服务器层面对HTTP请求方法、客户端请求、Referrer、Cookies和查询字符串方面对网站安全进行强化。

3 mod_rewrite强化网站安全

新版本中的Apache默认都已加载mod_rewrite模块,只需确认Apache主配置文件httpd.conf中有该模块的加载语句即可:LoadModule rewrite_module modules/mod_rewrite.so。

3.1 过滤HTTP方法

目前的HTTP协议定义了GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE 、CONNECT和PATCH方法,每个方法都有具体的应用场合,但作为一个常规网站来说,用到的方法只有GET和POST。通过mode_rewrite模块可以对不使用的方法进行排除,以降低网站遭受攻击的可能性。限定非GET和POST方法的规则指令如下:

RewriteEngine On

RewriteCond %{REQUEST_METHOD} ^(head|options|put|delete|trace|connect|patch) [NC]

RewriteRule ^(.*)$ - [F,L]

3.2审查客户端请求

客户端向网站服务器端发送的请求包含HTTP方法、URI和传输协议版本。通过mod_rewrite审查客户端请求中的非法字符串,降低网站遭遇HTTP回应拆分、XSS跨站脚本攻击、缓存毒化等攻击的风险。对客户端请求及请求中的URI进行审查的规则指令如下:

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协议中的Referrer用于追溯一个网页访问的来源。因其在互联网的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是网站服务端存储在客户端一些数据,往往以文件方式存在在客户端计算机中。网站使用Cookies技术追踪用户信息,如登录状态、登录时间、个人偏好、购物车信息等。但Cookies也被攻击者利用来对网站进行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中的查询字符串用于与服务器端脚本和数据库进行交互,攻击者通过在其中加入恶意字符和攻击代码来实现对网站的攻击。使用mod_rewrite模块的QUERY _STRING变量,对查询字符串的合法性和内容进行检查,对于包含恶意字符和攻击代码的请求进行拒绝。相关指令如下:

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网站服务器层面对HTTP请求方法、客户端请求、Referrer、Cookies和查询字符串方面对网站安全进行强化。规则变量REQUEST_METHOD、THE_REQUEST、REQUEST_URI、HTTP_REFERER、HTTP_COOKIE和QUERY_STRING可单独使用,也可结合应用在复杂的网站服务器环境中,借助于mode_rewrite模块进行实施,可以有效提高网站的安全性。

参考文献:

[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