65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.75/5 (4投票s)

1999年12月29日

CPOL
viewsIcon

65189

downloadIcon

800

本文档描述了一个 ISAPI 过滤器,用于仅允许访问在外部数据源中列出的主机。

示例使用一个文件 (hostdb.txt) 来跟踪授权的主机名,但您可以修改此示例以访问包含主机信息的数据库。

对于每个 URL 请求,过滤器首先查找最近允许的主机缓存,如果缓存查找失败,则查找 hostdb.txt 文件。这展示了一种授权连接的有效方法:缓存允许过滤器快速允许或拒绝主机访问,并且由于每个请求都通过过滤器传入,因此速度至关重要。

该项目是一个标准的 appwizard 生成的 ISAPI 过滤器。有 5 个参数可以更改以微调过滤器:缓存主机的最大数量、缓存条目移动到列表前端的位置(以缩短搜索时间!)、包含主机列表的文件名以及指示用户其 IP 地址无法解析为主机名或对此主机拒绝访问的 HTML 文件的名称。所有这些参数都是 hostnamefilter.h 头文件中的 #define 指令。

可以通过多种方式改进过滤器:使用数据库而不是文件来存储主机信息(您应该考虑使用存储过程进行搜索和/或缓存!)、从注册表加载参数、自动选择缓存主机的数量和列表重新排序参数等。

提供了完整的源代码,您需要编译它才能获得可用的过滤器。编译项目后,您需要执行以下步骤进行安装

  1. 运行 REGEDT32.EXE 并修改服务器的注册表如下。在 HKEY_LOCAL_MACHINE\CurrentControlSet\Services\W3SVC\Parameters 中选择 Filter DLLs 键。添加 hostnamefilter.dll 的本地路径,通常为 C:\WinNT\System32\InetSrv\hostnamefilter.dll。过滤器条目用逗号分隔。顺序很重要,如果您有其他优先级相同的过滤器,则首先列出的过滤器将首先接收请求。
  2. hostnamefilter.dll 文件复制到您在注册表中指定的目录。
  3. 确保系统帐户对过滤器 DLL 文件具有执行权限。
  4. 编辑 hostdb.txt 文件,使其包含有效的主机名。文件的格式为
    host1
    host2.foo.com
    *.edu
    *.foo.net
  5. hostdb.txt 文件复制到您在 hostnamefilter.h 头文件中为主机数据库指定的目录。
  6. NoName.htm 文件复制到您在 hostnamefilter.h 头文件中为指示 IP 地址无法解析为名称的页面指定的目录。
  7. NoAccess.htm 文件复制到您在 hostnamefilter.h 头文件中为指示对此主机拒绝访问的页面指定的目录。
  8. 确保系统帐户对 NoName.htmNoAccess.htmhostdb.txt 文件具有读取权限。
  9. 重新启动 WWW 服务。
© . All rights reserved.