匿名请求
该种方式不需要从用户得到任何信息。默认情况下,当浏览器对一个页面发出Web请求时, IIS首先尝试不进行用户验证处理请求。要作到这一点,IIS将扮演一个特定的Windows NT 帐户—IUSR_machinename (IUSR_machinename的machinename是IIS的主机计算机名)。该帐户在安装IIS时创建。如果IIS扮演IUSR_machinename帐户时能够访问请求的资源,则该Web页面将能够被匿名用户访问。
IUSR_machinename帐户的密码和Internet Service Manager(Internet服务管理器)中输入的密码不匹配是匿名访问时发生的一个常见问题。当IIS试图扮演IUSR_machinename帐户时,它会提交在Windows NT服务器的匿名登录文本框输入的密码。如果密码不正确,IIS将无法使用IUSR_machinename帐户。而一旦匿名访问失败,IIS将会对所有用户进行验证。因为验证过程没有提示,所以站点的验证可能会失败,但原因却往往不明显。就此我已经告诉过许多遇到奇怪的安全问题的Web站点管理员,因为他们的站点对每个用户进行验证,而他们却根本不知道这一点。如果你的页面访问其它诸如数据库或客户端组件(比如DLLs)等资源,使用的验证类型将会有很大不同。
验证的请求
对用户身份的肯定确认是必要的。当IIS无法使用IUSR_machinename帐户时,IIS将尝试验证并随后扮演用户以便确定该用户是否可以访问请求的资源。IIS可以使用两种方法进行用户验证:盘问/响应验证和基本验证。这些方法在本文的后面进行讨论。验证的Web访问通常最适合一个公司的Intranet或其内部包含的,经过细致定义的工作组。不过即使这样,仍然还要考虑一些限制。
控制验证方法,以及关心的原因
IIS Service Manager(IIS服务管理器)工具是配置IIS进行WWW、FTP和Gopher服务的主要场所。不需要对WWW属性对话框的选项了解过多的细节,我们只需要关心几个关键项。默认情况下,密码验证选项组中选择了匿名和盘问/响应验证。第三种方法是基本验证,将在后面说明。让我们看看几种控制对你的Web服务器进行访问的方式。
“允许匿名(Allow Anonymous)”选项框
如果选择了允许匿名(Allow Anonymous),IIS将通过扮演匿名登录帐户(默认为IUSR_machinename)尝试访问请求的资源。当IUSR_machinename帐户被自动创建后,它会被分配一个随机密码,并被添加到Guests组,赋予guest权限。选择或取消选择允许匿名是允许和禁止匿名访问整个Web服务器的最佳方法。当取消选择允许匿名后,只有具有有效、可验证(使用基本验证或挑战/响应验证) Windows NT帐户的用户能够得到服务。使用这种方式设置IIS通常只适用于团体或成员性的设置,这时验证访问你的站点的所有用户很重要。
改变文件和文件夹的权限
NTFS级的权限在IIS也得到支持,所以对文件和文件夹进行单独的权限设置能够在更小粒度上控制能被访问的页面。一个控制访问的常见方法如下:可被所有人查看的页面放置到一个文件夹中,而限制只能被站点管理员查看的页面放置到另一个文件夹。右键单击限制权限的文件夹,然后选择Properties/Securities/Permissions。因为我们的目标是保证IIS不能使用IUSR_machinename帐户匿名访问限制权限的文件夹,所以应从访问列表中删除Everyone组和IUSR_machinename帐户。将文件放置于两个不同的文件夹确保使用了维护两个组的权限方式,这比一个文件接一个文件的进行权限维护要容易的多。
基于ASP代码的安全
使用ASP代码,你能够实现更为专门的安全功能(这比刚刚描述的功能要有趣的多)。例如,一些令人讨厌的用户会捣乱你的站点。而由于他们的IP地址可以由服务器活动日志中得到,所以你能够使用下面的代码禁止该地址访问:
<%If request.servervariables("REMOTE_ADDR") = "200.200.157.4" then
Response.Buffer = TRUE
Response.Status = ("401 Unauthorized")
Response.End
End If%>
在Active Server Page内部具有许多变量可提供有关发送请求的浏览器的信息,以及有关IIS自身的信息。(要得到服务器变量的详细列表,请参阅Active Server pages联机帮助。)例如, LOGON_USER命令对于验证用户会返回其Domain\Username,对匿名用户返回空格。然后你能够使用服务器端代码检查特定用户并将他们定向到其它页面。我曾经见到过某些公司使用该技术将竞争对手拒之于他们的Web站点之外。