ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用ISAPI过滤器请求用户名和口令字(转)

使用ISAPI过滤器请求用户名和口令字(转)

原创 Linux操作系统 作者:jcszjswkzhou 时间:2019-05-01 19:51:06 0 删除 编辑
使用ISAPI过滤器请求用户名和口令字: 存在许多不同的方式来使用IIS安全过滤器,但在完成其它工作前,让我们先了解一下如何制作一个简单的过滤器。本节帮助你理解如何创建一个过滤器,该过滤器在服务器上传递值,并使用这些值对用户的合法性进行证实。
过滤器需要做的第一件事是从用户那里得到输入,这些输入通常包含用户名和口令字。一旦过滤器确定用户已提供了某些输入,它就简单地把控制移交给服务器去进行验证工作。当然这并不总是你所想的结果。你也许想在过滤器内完成一些服务器通常不做的附加处理。过滤器也许还要提供某种形式的附加解密功能,或许还要有专门的错误消息处理功能。下列内容是安全过滤器能提供的附加特性。
解密 我们总是选择在客户端对用户名和口令字进行加密,然后在服务器端对它们解密。ISAPI过滤器恰好能够胜任这一工作。
认证 Windows NT 不强制使用内置的认证功能,你总是可以选择自己去认证用户并给予用户适当的安全级。于是,可以进行认证,然后把用户分到某一个组,之后让Windows NT负责细节。有许多不同的认证场合。
定制化错误处理 也许你不喜欢Windows NT错误处理的方式,ISAPI 过滤器提供了限制最少的错误处理功能。当然,你提供的错误处理的精确层次由客户机和服务器来确定,这意味着你想对用户访问使用的浏览器实施控制。
专门化访问处理 有时不想让每个人都能在24小时内随时访问Web站点。无论是IIS还是Windows NT目前都没有办法使你的服务器对于一般用户是关闭的而对另外的用户仍然是开放的。而ISAPI过滤器能基于当前时间或其它规则提供访问,甚至可以基于服务器加载来限制访问某些站点。
现在我们对过滤器能干些什么有了一个一般的了解。我们下面给出一个例子。首先是使用本章前一节中创建ISAPI过滤器的过程创建一个框架。创建工程时有一点差别,这个差别是该程序命名为AuthUser,你可以随便起个其它什么名称。在ISAPI Extension Wizard( ISAPI扩展向导)- Step2 of 2对话框中,选中Client Authentication Request(客户机认证请求)选项,并且不选中End ofConnection(连结终止)选项。程序列表13.12是要向OnAuthenticate()函数添加的代码。随后我们将对这些代码的作用进行说明。
注释 为了能够让本示例正常运行,必须把测试的Web服务器设置成允许Chanllenge / Reponse 安全层次。如果你使用绝大多数情况下使用的Windows NT Authentication方法,那么该示例将不能正常工作。另外,还必须把目标目录设置成不允许匿名访问的方式。







正如你所看到的,比起前一个ISAPI过滤器示例来,这儿的代码复杂多了。其中我们需要完整的一件工作是从过滤器直接向服务器传递信息,之后再把它传给客户机。这个过滤器完成了三步操作:
1. 使用GetServerVariable()函数取得用户名,确定用户是否是匿名地访问服务器。(用户名返回值为空白,表明用户是匿名地访问服务器)。如果是,使用SeverSupportFuction()函数告诉服务器向客户机发出401错误信息。这使得显示出浏览器口令对话框,在这个对话框中用户输入口令字和用户名。
2. 用户输入口令字和用户名之后,使用GetServerVariable() 函数从输入流中提取它们,把用户名和口令字传递给Windows NT进行安全认证。
3. 使用SF_STATUS_REQ_NEXT_NOTIFICATION返回值告诉服务器,过滤器已成功地完成使命。
由于需要使用三个步骤,因此,使用安全过滤器时总有些令人吃惊的东西,例如,在使用GetServerVariable()函数提取用户名与口令字和使用Strncpy()函数把这一信息拷贝到pAuthent结构之间的时间内,对过滤器进行第二次操作期间将会进行解密。在第三个步骤中也要发生一些事情,例如,要对你需要直接与用户交互作出决定,这通常发生于对过滤器进行的第三次操作中。
请注意,我提供了SF_STATUS_REQ_NEXT_NOTIFICATION这个返回值。这是让服务器处理认证用户和显示Web页等细节的一个信号。如果想自己完成全部认证工作,就需要显示请求的信息。
技巧 IIS通常在报错前提供三次机会让你正确地输入口令字。有两种办法可以防止这一行为的发生。第一种,在对过滤器进行的第二、第三次操作之间,自己完成认证。这样就可以给用户以另外的机会来提供正确的口令字,并将正确的用户名和口令字传递给服务器。第二种方法是使用SF_STATUS_REQ_ERROR返回值在第一次企图访问Web 服务器失败后就终止进一步的访问企图。这一个返回值将显示一个服务器错误消息,并且可能会欺骗一些不那么精明的用户,让它们以为服务器发生了问题,从而不再企图访问服务器。
一旦编译了这个过滤器,使用本章第一个ISAPI过滤器相同的技术安装它。运行这个示例就会看到如下图所示的口令对话框。

如果你键入了并不存在的用户名或口令字,则会看到如下图所示的服务器生成的报错消息。
输入一个有效的用户名和口令字就可以访问该Web站点了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-123229/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-29

  • 博文量
    2968
  • 访问量
    2189955