创建ISAPI过滤器: 前面两节介绍了如何利用ISAPI扩展更好地构造Web站点。本节将介绍构建自己的 ISAPI过滤器的过程。创建ISAPI过滤器过程与创建扩展的过程的起始部分是一样的。下面的步骤将帮助你创建一个程序框架。
注 记住ISAPI过滤器与扩展不同,过滤器在特定事件发生时自动做出反应,而扩展更像是一个应用程序那样被调用。
1. 使用File(文件)|New(新建)命令显示 New 对话框。选中 ISAPI ExtensionWizard(ISAPI扩展向导)(即使要创建的是过滤器,也要用ISAPI ExtensionWizard来创建)。
2. 输入想创建的过滤器的名称。对这个ISA示例我们使用了NoLog,但你可以任意选用其它名称。
3. 单击OK,即出现ISAPI Extension Wizard(ISAPI扩展向导)棗Step 1 of 2对话框。在这里为你的ISA选择各种特性。注意对话框有三个主要区域。选中第一个复选框表示创建过滤器,选中第二个复选框表示创建扩展。第三部分定义如何将MFC链接到你的应用程序中。
4. 选中Filter(过滤器)选项而不选中Extension (扩展)选项(注意加入过滤器也就增加了一些其它步骤)。在Filter Description(过滤器描述)域中,提供一个描述你的ISA 功能的短小扼要的说明。该描述将作为字符串来显示,需要时可以在DLL中使用它。当别人为了使用ISA打开它时,该描述不会出现在Properties(属性)对话框中,所以还要给DLL 的版本信息中加入一些文本。
5. 在Filter Description(过滤器描述)域中输入Classify some log entries for securityreasons(为了 安全原因而对日志项进行密级划分)。
6. 单击Next,就能看到如下图所示的ISAPI Extension Wizard(ISAPI 扩展向导)棗Step 2 of 2对话框。
这是选择过滤器能够提供的事件以及监测类型的属性页。有三个方面的情况需要考虑。这些选项的详细介绍请参见“高级技巧”中的“选择过滤器选项”部分。
7. 选中Server log Writes(服务器日志写入)复选框,而不选End of Connection(连接结束)复选框。由于我们创建了一个简单的过滤器来保持某些日志项的密级划分,所以每当用户申请服务器的特殊类型服务时就激活过滤器。
8. 单击Finish,就会看到如下图所示的New Project Information (新建工程信息)对话框。一定要二次核对过滤器的这些设置项,因为New Project Information页提供了对过滤器将要看到的事件进行的详细分类。
9. 单击OK,ISAPI Extension Wizard(ISAPI扩展向导)就会创建所需的程序框架。
这个示例的代码部分简单明了。过滤程序很容易弄得复杂化,从而导致调试很困难。大多数情况下,你应该让过滤器程序尽可能简短。在对出错的过滤器查错时,如果程序是模块化的,将会提供极大的帮助。程序列表13.5列出了为使OnLog() 函数工作而需要添加的代码。
可以看出,为了某个特定目标,我们对日志项进行简单的监测,这个特定目标可以是除另一个Web页之外的任意数量的事情。一旦找到所需的日志项,我们将按照分类设置修改两个成员:pszTarget和pszParameters。显然这种思路已大大简化,不过都有实际的用途。你可能不想让某个特定日志项被别人偷看,这里介绍的方法就可以实现你的目的。记住 黑客们经常利用它们在服务器上找到的目志文件,来盗窃公司的内部资源。不仅如此,对某些日志项进行密级划分还有其它原因。在某些情况下,你可能想完全删除某些日志项只是因为不想再监测它们。好了,我们已经详细说明了如何小心使用这种过滤器,不过这将是一个好的开端。
现在可以编译新的ISAPI过滤器了,但是,在你将它移到服务器上的Controls或Scripts目录之后,仍要做一件事。与扩展不同,ISA过滤器在你启动服务器时即被装载。也就是说,如果你使用的是老版本的IIS,那么,就停止目标服务器,生成一个注册表项,然后再次启动该服务器。过滤器将作为启动进程的一部分被装载。
WWW 服务在如下的注册值中保存它的过滤器项:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesW3SVCParametersFilter DLLs。你可能已经在该位置找到一个或多个值。这里要做的是加上一个逗号,然后输入自己新的ISA过滤器的位置。一定要在学习下节之前做这一步,否则过滤器就不会被装载。实际上,如果过滤器工作出了问题,这里是你首先应该检查的地方。
对IIS 4.0以上版本的用户来说,不必为装载ISAPI过滤器而手工编辑注册表了。此时所要完成的工作就是打开Microsoft Management Console(管理控制台),用右键单击需添加过滤器的Web站点,从关联菜单中选择Properties(属性),再选中ISAPZ Filter(过滤器)项,就会看到如下所示的对话框。
单击Add(添加)按钮,就会看到 Filter Properties (过滤器属性)对话框,在Filter Name(过滤器名)域中键入名称,使用Browse(浏览)按钮找到Nolog.DLL文件(或想添加到Web站点的随便什么别的ISAPI过滤器)。选定文件后,其名称将出现于Executable(可执行)域。单击OK关闭Filter Properties(过滤器属性)对话框;再次单击OK关闭Default Web Site Properties(缺省Web站点属性)对话框。IIS将为你自动加载该过滤器。
选择过滤器选项
ISAPI Extension Wizard(ISAPI扩展向导)棗Step 2 of 2页对于过滤器设计者是非常重要的,这是因为它包含了需要为过滤器设置的监测选项。这一页上的选项分三部分。第一部分确定过滤器优先级,缺省设置为Low (低),这在大多数情况下运行良好,一般后台任务使用这一层次的优先级。 安全过滤器需要设置为medium(中)优先级,毕竟你不想让过滤器在事件之后再作出反应,在事件发生期间过滤器就作出反应就好得多了。最后,High(高)优先级设置应为关键层次的过滤器保留着,例如,向每个人发出一条消息,声明由于电源故障,服务器即将关机,这时就应使用High优先级了。
ISAPI Extension Wizard(ISAPI扩展向导)-Step 2 of 2对话框的第二部分包含着两个选项。如果用户拥有 安全的连接就应复选第一项,例如,如果计划对注册用户提供额外服务,而不让匿名用户得到这些额外服务,那么就应复选第一项了。第二项是不 安全端口会话,允许你在用户不拥有对服务器的 安全连接时监测事件。如果你有一个Internet一般Web站点,大多数用户都是这样去访问你的站点的。
第三部分是过滤器追踪的事件列表,每当这里指定的事件发生,就调用过滤器,但是,过滤器被调用时有两件事要影响它。如果过滤器的优先级为Low(低),那么High(高)或medium(中)优先级的过滤器将先对事件作出反应。另外,你的过滤器不得不设置成用户当前 安全级来监测事件,换言之,如果你把过滤器设置成监测非 安全级行动而用户处于 安全模式,则过滤器就不会被调用。
注 记住ISAPI过滤器与扩展不同,过滤器在特定事件发生时自动做出反应,而扩展更像是一个应用程序那样被调用。
1. 使用File(文件)|New(新建)命令显示 New 对话框。选中 ISAPI ExtensionWizard(ISAPI扩展向导)(即使要创建的是过滤器,也要用ISAPI ExtensionWizard来创建)。
2. 输入想创建的过滤器的名称。对这个ISA示例我们使用了NoLog,但你可以任意选用其它名称。
3. 单击OK,即出现ISAPI Extension Wizard(ISAPI扩展向导)棗Step 1 of 2对话框。在这里为你的ISA选择各种特性。注意对话框有三个主要区域。选中第一个复选框表示创建过滤器,选中第二个复选框表示创建扩展。第三部分定义如何将MFC链接到你的应用程序中。
4. 选中Filter(过滤器)选项而不选中Extension (扩展)选项(注意加入过滤器也就增加了一些其它步骤)。在Filter Description(过滤器描述)域中,提供一个描述你的ISA 功能的短小扼要的说明。该描述将作为字符串来显示,需要时可以在DLL中使用它。当别人为了使用ISA打开它时,该描述不会出现在Properties(属性)对话框中,所以还要给DLL 的版本信息中加入一些文本。
5. 在Filter Description(过滤器描述)域中输入Classify some log entries for securityreasons(为了 安全原因而对日志项进行密级划分)。
6. 单击Next,就能看到如下图所示的ISAPI Extension Wizard(ISAPI 扩展向导)棗Step 2 of 2对话框。
这是选择过滤器能够提供的事件以及监测类型的属性页。有三个方面的情况需要考虑。这些选项的详细介绍请参见“高级技巧”中的“选择过滤器选项”部分。
7. 选中Server log Writes(服务器日志写入)复选框,而不选End of Connection(连接结束)复选框。由于我们创建了一个简单的过滤器来保持某些日志项的密级划分,所以每当用户申请服务器的特殊类型服务时就激活过滤器。
8. 单击Finish,就会看到如下图所示的New Project Information (新建工程信息)对话框。一定要二次核对过滤器的这些设置项,因为New Project Information页提供了对过滤器将要看到的事件进行的详细分类。
9. 单击OK,ISAPI Extension Wizard(ISAPI扩展向导)就会创建所需的程序框架。
这个示例的代码部分简单明了。过滤程序很容易弄得复杂化,从而导致调试很困难。大多数情况下,你应该让过滤器程序尽可能简短。在对出错的过滤器查错时,如果程序是模块化的,将会提供极大的帮助。程序列表13.5列出了为使OnLog() 函数工作而需要添加的代码。
可以看出,为了某个特定目标,我们对日志项进行简单的监测,这个特定目标可以是除另一个Web页之外的任意数量的事情。一旦找到所需的日志项,我们将按照分类设置修改两个成员:pszTarget和pszParameters。显然这种思路已大大简化,不过都有实际的用途。你可能不想让某个特定日志项被别人偷看,这里介绍的方法就可以实现你的目的。记住 黑客们经常利用它们在服务器上找到的目志文件,来盗窃公司的内部资源。不仅如此,对某些日志项进行密级划分还有其它原因。在某些情况下,你可能想完全删除某些日志项只是因为不想再监测它们。好了,我们已经详细说明了如何小心使用这种过滤器,不过这将是一个好的开端。
现在可以编译新的ISAPI过滤器了,但是,在你将它移到服务器上的Controls或Scripts目录之后,仍要做一件事。与扩展不同,ISA过滤器在你启动服务器时即被装载。也就是说,如果你使用的是老版本的IIS,那么,就停止目标服务器,生成一个注册表项,然后再次启动该服务器。过滤器将作为启动进程的一部分被装载。
WWW 服务在如下的注册值中保存它的过滤器项:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesW3SVCParametersFilter DLLs。你可能已经在该位置找到一个或多个值。这里要做的是加上一个逗号,然后输入自己新的ISA过滤器的位置。一定要在学习下节之前做这一步,否则过滤器就不会被装载。实际上,如果过滤器工作出了问题,这里是你首先应该检查的地方。
对IIS 4.0以上版本的用户来说,不必为装载ISAPI过滤器而手工编辑注册表了。此时所要完成的工作就是打开Microsoft Management Console(管理控制台),用右键单击需添加过滤器的Web站点,从关联菜单中选择Properties(属性),再选中ISAPZ Filter(过滤器)项,就会看到如下所示的对话框。
单击Add(添加)按钮,就会看到 Filter Properties (过滤器属性)对话框,在Filter Name(过滤器名)域中键入名称,使用Browse(浏览)按钮找到Nolog.DLL文件(或想添加到Web站点的随便什么别的ISAPI过滤器)。选定文件后,其名称将出现于Executable(可执行)域。单击OK关闭Filter Properties(过滤器属性)对话框;再次单击OK关闭Default Web Site Properties(缺省Web站点属性)对话框。IIS将为你自动加载该过滤器。
选择过滤器选项
ISAPI Extension Wizard(ISAPI扩展向导)棗Step 2 of 2页对于过滤器设计者是非常重要的,这是因为它包含了需要为过滤器设置的监测选项。这一页上的选项分三部分。第一部分确定过滤器优先级,缺省设置为Low (低),这在大多数情况下运行良好,一般后台任务使用这一层次的优先级。 安全过滤器需要设置为medium(中)优先级,毕竟你不想让过滤器在事件之后再作出反应,在事件发生期间过滤器就作出反应就好得多了。最后,High(高)优先级设置应为关键层次的过滤器保留着,例如,向每个人发出一条消息,声明由于电源故障,服务器即将关机,这时就应使用High优先级了。
ISAPI Extension Wizard(ISAPI扩展向导)-Step 2 of 2对话框的第二部分包含着两个选项。如果用户拥有 安全的连接就应复选第一项,例如,如果计划对注册用户提供额外服务,而不让匿名用户得到这些额外服务,那么就应复选第一项了。第二项是不 安全端口会话,允许你在用户不拥有对服务器的 安全连接时监测事件。如果你有一个Internet一般Web站点,大多数用户都是这样去访问你的站点的。
第三部分是过滤器追踪的事件列表,每当这里指定的事件发生,就调用过滤器,但是,过滤器被调用时有两件事要影响它。如果过滤器的优先级为Low(低),那么High(高)或medium(中)优先级的过滤器将先对事件作出反应。另外,你的过滤器不得不设置成用户当前 安全级来监测事件,换言之,如果你把过滤器设置成监测非 安全级行动而用户处于 安全模式,则过滤器就不会被调用。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-123232/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10294527/viewspace-123232/