用ISAPI Filter建立IIS“防火墙”

2009-03-10 09:50吕浩勇王仕杰张朝阳
中国教育信息化·高教职教 2009年2期
关键词:防火墙

吕浩勇 王仕杰 张朝阳

摘 要:本文深入探讨了用ISAPI Filter建立IIS“防火墙”的原理和方法,并给出了保护Access数据库文件不被用户下载的例子来说明具体的实现方法。

关键词:ISAPI IIS 防火墙 SQL注入

中图分类号:TP393.08 文献标识码:B 文章编号:1673-8454(2009)03-0052-02

随着Internet的飞速发展,安全问题变得日益重要,防火墙技术越来越受到人们的重视。而今,Microsoft?誖Windows?誖家族的Internet 信息服务(IIS)成为广大中小企业的Web平台,它在Intranet、Internet或Extranet上提供了集成、可靠、可伸缩、可管理的 Web 服务器功能,同时可以执行的多种脚本满足用户动态内容的交互。有很多网站的后台管理是直接从网上下载的源代码,若这些源代码存在漏洞也不容易发现,本文介绍了一种利用ISAPI(Internet Server Application Programming Interface,互联网应用程序编程接口)来建立IIS“防火墙”技术,该技术具有安全、稳定、易用等优点,且不需要修改原始的网站源代码,能在网站源代码存在漏洞的情况下防御攻击,实现防火墙部分功能。

一、ISAPI Filter概述

ISAPI是由微软和Process软件公司联合提出的Web服务器上的API标准。ISAPI被分为两种类型:ISAPI Server Extension(ISAPI服务器扩展)和ISAPI Filter(ISAPI过滤器)。其中,ISAPI Server Extension 可实现通常CGI 程序的功能,它利用一些特殊的链接,指向服务器的作业,供程序开发人员设计一些扩展功能;而ISAPI Filter 则可为IIS提供纵向扩展的功能,它倾向于构造服务器直接调用的模块,提供一种无缝链接部件用于监测来自于服务器的HTTP 请求。ISAPI Filter的应用程序以动态链接库的形式参与Web服务器的运作,它在Web Server 启动时被调用,在Web Server 停止时被卸载。ISAPI Filter 位于服务器和客户端之间,能够对Web服务器和客户端之间的通信进行预处理(Pre-processing of requests)和后处理(Post-processing)。用户对Web服务器的请求均会先通过ISAPI Filter进行过滤,而Web服务器返回浏览器的响应也会首先经ISAPI Filter过滤,才能触发IIS的响应。ISAPI Filter能用来定制以下事件:处理HTTP协议头预处理、接收发送数据的预处理、HTTP会话结束信息处理、自定义的安全认证机制、数据压缩、数据加密、URL映射信息处理、日志记录处理等。由此可见,灵活利用这些定制处理,就可以完成许多看似难以实现的功能,如:统计文件访问量、防SQL注入、防文件下载、限制IP地址访问、会话结束等,可以实现许多依赖防火墙才能实现的功能,定制一个自己的IIS“防火墙”。

二、创建ISAPI Filter的方法

一个标准的ISAPI Filter由以下几个部分组成:过滤器初始化、消息接收过滤、事件处理、退出处理。创建ISAPI Filter非常简单,只需完成3个接口DLL函数即可。它们是GetFilterVersion( )和HttpFilterProc( )和TerminateFilter( )。可以查看Microsoft Developer Network(MSDN)了解详细的帮助。ISAPI Filter是动态链接库(DLL)文件,可以采用多种编程语言开发,如:VC++、VB或C/C++等语言开发。开发时可以直接使用API函数,也可以使用Microsoft Foundation Classes(MFC,微软基础类库)。前者生成的文件小,耗用系统资源小,开发时相对复杂一些,后者生成的文件较大,运行时效率也不如前者,并且离不开MFC的支持,但开发时较为便利。因此常用的做法是在MFC下开发,开发完后再移植为API。本文采用Windows C语言开发。IIS调用每个Filter提供的GetFilterVersion()函数,获得Filter所需要的服务器版本,并与自己的版本相比较,以保证版本兼容以及该Filter希望处理的事件类型。ISAPI Filter是通过事件来激活的,当满足条件的事件到达时,服务器就会调用Filter引出的函数HttpFilterProc( )对该事件进行处理,在这个函数中根据不同事件作不同处理,服务器和HttpFilterProc( )之间是通过过滤器上下文(Http Filter Context)来进行通信的。IIS停止时调用TerminateFilter( ),通常在该函数中释放程序所用资源。接下来通过例子说明具体操作过程。

三、示例如何用ISAPI Filter建立IIS“防火墙”

1.保护Access文件原理

通过对客户端的请求判断其访问文件的扩展名并进行过滤,就可以实现保护Access数据库文件不被用户下载。

因为Access数据库文件的扩展名为mdb,当客户端访问扩展名为mdb的文件时,就拒绝其访问,并给出警告信息。

(1)创建Win32 Dynamic-Link Library项目

(2)过滤器初始化

过滤器初始化一般是设置版本信息、优先级、过滤事件,这些工作在GetFilterVersion()中完成,如:

BOOL WINAPI GetFilterVersion(PHTTP_FILTER_ VERSION pVer)

{

pVer->dwFilterVersion = HTTP_FILTER_REVISION;

lstrcpy(pVer->lpszFilterDesc,"Filter mdb");

pVer->dwFlags = SF_NOTIFY_URL_MAP;

return TRUE;

}

上面这段程序中“pVer->dwFlags=SF_NOTIFY_URL_ MAP;”表示ISAPI过滤器程序所关注的事件为逻辑URL映射成物理路径事件。当该事件发生时,IIS会传送一个NotificationType的变量给HttpFilterProc函数,由该函数对该事件做出处理。

(3)事件处理

DWORD WINAPI HttpFilterProc(HTTP_FILTER_ CONTEXT *pfc,DWORD noteType,VOID *pvNote)

{

char urls[256];

char buf[255];

DWORD lenURL;

char *szExtension;

intilen;

strcpy(urls,((PHTTP_FILTER_URL_MAP)pvNote)->pszURL);

//得到客户端访问的URL,保存在urls中

_strlwr(urls);//将urls转换为小写

lenURL = strlen(urls);

szExtension=&urls[lenURL - 3];//得到访问文件的扩展名

if ( strcmp(szExtension, "mdb") == 0 )

//比较文件扩展名是否为mdb

{

sprintf(buf,"扩展名为mdb的文件不允许访问,请与管理员联系。");

ilen=strlen(buf);

(pfc->WriteClient)(pfc,buf,&ilen ,0);

//如果访问的是mdb文件,向客户端发出警告信息

return SF_STATUS_REQ_FINISHED;

//返回SF_STATUS_REQ_FINISHED表示会话结束

}

return SF_STATUS_REQ_NEXT_NOTIFICATION;

//返回SF_STATUS_REQ_NEXT_NOTIFICATION唤起下一个Filter响应事件

}

2.在服务器上配置ISAPI Filter

为使ISAPI过滤器能够运行,对应于不同版本的操作系统还需要采取不同措施:

(1)Windows NT:要在注册表的如下键值中存放ISAPI Filter的文件名,IIS服务器启动时从该键值中获得Filter的文件名并加载它们。

HKEY_LOCAL_MACHINESystemCurrentControlSetServicesW3SVCParameters FilterDlls键值为ISAPI过滤器文件的全路径名称,不同的ISAPI过滤器文件之间用“;”分隔,可以根据执行的优先顺序加在适当的位置。设置好后重新启动IIS服务,ISAPI过滤器就能发挥作用了。

(2)Windows 2000,Windows Server 2003:打开Internet信息服务管理器,关闭IIS服务,在Web站点属性页上选中ISAPI筛选器标签,将Filter加入到列表框中,重新启动IIS服务即能使ISAPI过滤器生效了。

3.测试效果

在浏览器中输入“Http://127.0.0.1/a.mdb”浏览器显示如下信息:扩展名为mdb的文件不允许访问,请与管理员联系;访问服务器的其他文件,均正常。这就有效地保护了Web服务器上扩展名为mdb的文件。

四、结束语

Web服务器安全是一个需要不断认识的过程。针对目前广泛使用的IIS服务器,本文的方法有一定的实际意义,通过ISAPI Filter可以方便地完成许多强大的功能(如:统计文件访问量、防SQL注入、防文件下载、限制IP地址访问、结束会话等),使Web服务器的安全得到进一步提高,同时使信息得到有效的处理。

参考文献:

[1]Charles Petzold.Windows程序设计(第五版)[M].北京:北京大学出版社,2001:1162-1175.

[2]George Shepherd.THE ASP COLUMN[J].MSDN Magazine, 1528-4859, 2004 Vol.19 No.2

[3]Panos Kougiouris. Intercept, Monitor, and Modify Web Requests with HTTP Filters in ISAPI and ASP.NET[J]. MSDN Magazine, 1528-4859, 2002 Vol.17 No.8

[4] JAY FRAZIER.IIS & ISAPI[J].Web techniques, 1999 Vol.4 No.8

[5] Microsoft Developer Network 2005(MSDN)

猜你喜欢
防火墙
筑牢防火墙 系紧安全带
“一封家书”寄深情 筑牢疫情“防火墙”
全民总动员,筑牢防火墙
构建防控金融风险“防火墙”
防火墙技术在网络安全应用中的现状
计算机网络安全中防火墙技术的应用思考
智慧防火墙
海南新农合有了“防火墙”
在舌尖上筑牢抵御“僵尸肉”的防火墙
下一代防火墙要做的十件事