ISAPI 过滤器, 仅允许具有选定名称的主机访问






2.75/5 (4投票s)
本文档描述了一个 ISAPI 过滤器,用于仅允许访问在外部数据源中列出的主机。
示例使用一个文件 (hostdb.txt) 来跟踪授权的主机名,但您可以修改此示例以访问包含主机信息的数据库。
对于每个 URL 请求,过滤器首先查找最近允许的主机缓存,如果缓存查找失败,则查找 hostdb.txt 文件。这展示了一种授权连接的有效方法:缓存允许过滤器快速允许或拒绝主机访问,并且由于每个请求都通过过滤器传入,因此速度至关重要。
该项目是一个标准的 appwizard 生成的 ISAPI 过滤器。有 5 个参数可以更改以微调过滤器:缓存主机的最大数量、缓存条目移动到列表前端的位置(以缩短搜索时间!)、包含主机列表的文件名以及指示用户其 IP 地址无法解析为主机名或对此主机拒绝访问的 HTML 文件的名称。所有这些参数都是 hostnamefilter.h 头文件中的 #define
指令。
可以通过多种方式改进过滤器:使用数据库而不是文件来存储主机信息(您应该考虑使用存储过程进行搜索和/或缓存!)、从注册表加载参数、自动选择缓存主机的数量和列表重新排序参数等。
提供了完整的源代码,您需要编译它才能获得可用的过滤器。编译项目后,您需要执行以下步骤进行安装
- 运行 REGEDT32.EXE 并修改服务器的注册表如下。在 HKEY_LOCAL_MACHINE\CurrentControlSet\Services\W3SVC\Parameters 中选择 Filter DLLs 键。添加 hostnamefilter.dll 的本地路径,通常为 C:\WinNT\System32\InetSrv\hostnamefilter.dll。过滤器条目用逗号分隔。顺序很重要,如果您有其他优先级相同的过滤器,则首先列出的过滤器将首先接收请求。
- 将 hostnamefilter.dll 文件复制到您在注册表中指定的目录。
- 确保系统帐户对过滤器 DLL 文件具有执行权限。
- 编辑 hostdb.txt 文件,使其包含有效的主机名。文件的格式为
host1 host2.foo.com *.edu *.foo.net
- 将 hostdb.txt 文件复制到您在 hostnamefilter.h 头文件中为主机数据库指定的目录。
- 将 NoName.htm 文件复制到您在 hostnamefilter.h 头文件中为指示 IP 地址无法解析为名称的页面指定的目录。
- 将 NoAccess.htm 文件复制到您在 hostnamefilter.h 头文件中为指示对此主机拒绝访问的页面指定的目录。
- 确保系统帐户对 NoName.htm、NoAccess.htm 和 hostdb.txt 文件具有读取权限。
- 重新启动 WWW 服务。