论文部分内容阅读
摘 要:本文深入探讨了用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=
关键词: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=